2017-06-10 6 views
0

J'ai besoin de reconditionner une archive tar à l'autre. Je sais que ArchieveEntry est déjà un flux, alors je suis simplement en train d'écrire d'un flux à l'autre. Voici mon code:Apache Commons Compresser écrire d'un flux à un autre raccrocher

public void repack (String sourceFile, String destFile) throws IOException { 

    TarArchiveInputStream tarIn = new TarArchiveInputStream (new BufferedInputStream (new FileInputStream (sourceFile))); 
    TarArchiveOutputStream tarOut = new TarArchiveOutputStream (new FileOutputStream (destFile)); 

    TarArchiveEntry tarEntry; 

    while ((tarEntry = tarIn.getNextTarEntry()) != null) { 

     tarOut.putArchiveEntry (tarEntry); 

     if (tarEntry.isFile()) { 

      int counter; 
      byte byteData[] = new byte[(int) tarEntry.getSize()]; 

      while ((counter = tarIn.read (byteData, 0, byteData.length)) != -1) 
      tarOut.write (byteData, 0, counter); 

     } 

     tarOut.closeArchiveEntry(); 

    } 

    tarIn.close(); 

    tarOut.flush(); 
    tarOut.close(); 

} 

Il ne montre aucune erreur, il est simplement raccrocher. Qu'est-ce qui peut être un problème? Merci d'avance!

+0

peut-être utiliser '> 0' au lieu de'! = -1' – F43nd1r

+0

@ F43nd1r merci, mais non, les flux commençant toujours par 0, et non par 1, donc zéro est -1, pas 0. Idem avec les tableaux. – Acuna

+0

Résolvez le problème en modifiant la boucle avec 'IOUtils.copy (tarIn, tarOut);' – Acuna

Répondre

0

pense que la meilleure façon est d'utiliser IOUtils.copy (tarIn, tarOut);, j'ai change juste la partie de la boucle de code à

if (tarEntry.isFile()) 
IOUtils.copy (tarIn, tarOut);