Ich verwende die Apache Commons 1.4.1-Bibliothek zum Komprimieren und Dekomprimieren von ".tar.gz"
Dateien.So entpacken Sie eine TAR-Datei mit Apache Commons
Ich habe Probleme mit dem letzten Bit - eine TarArchiveInputStream
in eine FileOutputStream
umwandeln.
Seltsamer, es bricht auf dieser Linie: C:
FileOutputStream fout = new FileOutputStream(destPath);
destPath
eine Datei mit einem Canonical Pfad ist \ Dokumente und Einstellungen \ Administrator \ Eigene Dateien \ JavaWorkspace \ BackupUtility \ untarred \ Test \ subdir \ testinsub.txt
Fehler produziert:
Exception in thread "main" java.io.IOException: The system cannot find the path specified
Irgendeine Idee, was es sein könnte? Und warum kann es den Weg nicht finden?
Ich füge die ganze Methode unten an (die meisten davon sind von here aufgehoben).
private void untar(File dest) throws IOException {
dest.mkdir();
TarArchiveEntry tarEntry = tarIn.getNextTarEntry();
// tarIn is a TarArchiveInputStream
while (tarEntry != null) {// create a file with the same name as the tarEntry
File destPath = new File(dest.toString() + System.getProperty("file.separator") + tarEntry.getName());
System.out.println("working: " + destPath.getCanonicalPath());
if (tarEntry.isDirectory()) {
destPath.mkdirs();
} else {
destPath.createNewFile();
FileOutputStream fout = new FileOutputStream(destPath);
tarIn.read(new byte[(int) tarEntry.getSize()]);
fout.close();
}
tarEntry = tarIn.getNextTarEntry();
}
tarIn.close();
}
Peinlich zu fragen, aber ich habe versucht, mit Ihrem Code-Beispiel und sah es funktioniert eine bestimmte 'gzip' Datei, mit der ich arbeitete. Wie funktioniert das ohne Aufruf von 'fout.write (...)' angesichts des Inhalts, der auf dem inputStream gelesen wurde? Im [answer @ user1894600 suggest] (http://stackoverflow.com/a/14211580/320399) muss er explizit 'write (...)' aufrufen und das Byte-Array bereitstellen, das in den Speicher eingelesen wurde. – blong