Estoy usando la biblioteca Apache Commons 1.4.1 para comprimir y descomprimir archivos ".tar.gz"
.Cómo descomprimir un archivo TAR utilizando Apache Commons
Estoy teniendo problemas con el último bit - la conversión de un TarArchiveInputStream
en un FileOutputStream
.
Por extraño que parezca, es romper en esta línea:
FileOutputStream fout = new FileOutputStream(destPath);
destPath
es un archivo con una ruta canónica de: C: \ Documents and Settings \ Administrador \ Mis documentos \ JavaWorkspace \ BackupUtility \ untarred \ Test \ subdirectorio \ testinsub.txt
error producido:
Exception in thread "main" java.io.IOException: The system cannot find the path specified
¿Alguna idea de lo que podría ser? ¿Y por qué no puede encontrar el camino?
Estoy adjuntando todo el método a continuación (la mayoría de los cuales se elimina de 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();
}
Estoy avergonzado de preguntar esto, pero traté de usar tu código de muestra y lo vi funcionar dado un archivo 'gzip' en particular con el que estaba trabajando. ¿Cómo funciona esto sin llamar a 'fout.write (...)' dado el contenido leído en InputStream? En [answer @ user1894600 suggestions] (http://stackoverflow.com/a/14211580/320399), tiene que llamar explícitamente a 'write (...)' y proporcionar la matriz de bytes que se ha leído en la memoria. – blong