2017-06-10 1 views
0

Ich muss ein Tear-Archiv zu einem anderen zu packen. Ich weiß, dass ArchieveEntry bereits ein Stream ist, also schreibe ich einfach von einem Stream zum anderen. Hier ist mein Code:Apache Commons Compress Schreiben von einem Stream zu einem anderen aufhängen

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(); 

} 

Es zeigen keine Fehler, es ist einfach auflegen. Was kann ein Broblem sein? Danke im Voraus!

+0

vielleicht '> verwenden 0 'statt'! = -1' – F43nd1r

+0

@ F43nd1r danke, aber nein, Ströme beginnen immer mit 0, nicht 1, also ist Null gleich -1, nicht 0. Gleiches gilt für Arrays. – Acuna

+0

Lösen Sie das Problem, indem Sie die Schleife mit 'IOUtils.copy (tarIn, tarOut);' – Acuna

Antwort

0

Denken der beste Weg, IOUtils.copy (tarIn, tarOut); zu verwenden ist, habe ich nur die Schleife zu

Teil des Codes ändern
if (tarEntry.isFile()) 
IOUtils.copy (tarIn, tarOut); 
Verwandte Themen