Używam biblioteki Apache Commons 1.4.1 do kompresowania i dekompresji plików ".tar.gz"
.Jak rozpakować plik TAR za pomocą Apache Commons
Mam problem z ostatnim bitem - przekształcenie TarArchiveInputStream
w FileOutputStream
.
Co dziwne, to łamanie na tej linii:
FileOutputStream fout = new FileOutputStream(destPath);
destPath
to plik z kanoniczną ścieżkę: C: \ Documents and Settings \ Administrator \ Moje dokumenty \ JavaWorkspace \ BackupUtility \ rozpakowany \ test \ podkatalog \ testinsub.txt
błąd wymienić:
Exception in thread "main" java.io.IOException: The system cannot find the path specified
Każdy pomysł, co to może być? I dlaczego nie jest w stanie znaleźć ścieżki?
Załączam całą poniższą metodę (większość z nich została usunięta z here).
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();
}
Zakłopotany, aby o to zapytać, ale próbowałem użyć próbki kodu i zobaczyłem, że działa z danym plikiem 'gzip', z którym pracowałem. Jak to działa bez wywoływania 'fout.write (...)' biorąc pod uwagę zawartość odczytaną w inputStream? W [answer @ user1894600 sugestiach] (http://stackoverflow.com/a/14211580/320399) musi jawnie wywołać 'write (...)' i dostarczyć tablicę bajtów, która została odczytana w pamięci. – blong