TrueZip - ¿Cómo descomprimir archivos JAR/zip internos sin expandirlos como directorios?
Pregunta
Estoy creando un archivo TZP usando TrueZip 7 y el método CP_RP para agregar todos los contenidos de directorio a la vez al archivo TZP.
Después de eso, estoy tratando de extraer todos los contenidos del archivo TZP a un directorio de destino. Sin embargo, la llamada:
zipFile = new TFile("test.zip");
public void extract(TFile file){
for (TFile iFile : zipFile.listFiles()){
if(iFile.isDirectory()){
extract(iFile);
}else{
File output = new File(iFile.getPath());
iFile.mv(output);
}
}
}
Falla con un error: java.io.ioexception: [ruta] test.zip myjar.jar (el destino ya existe). Si uso CP en lugar de MV, entonces el error es ruta] test.zip myjar.jar (contenido en [ruta] test.zip myjar.jar)
El problema también parece ser que TrueZip identifica Zips y Jars como directorios y archivos, por lo que al hacer un ISDirectory () en ellas, esto tiene éxito y hacer un ListFiles () devuelve todos los archivos contenidos, por lo que ejecutar un CP () Los archivos hacen que todos los contenidos JAR/ZIP se copien como directorios.
¿Cuál es la forma correcta de extraer estos archivos de archivo sin expandirlos?
Solución
La extracción de un archivo de archivo a un directorio se puede hacer con una llamada de método:
TFile archive = new TFile("archive.zip");
TFile directory = new TFile("directory");
TFile.cp_rp(archive, directory, TArchiveDetector.NULL, TArchiveDetector.NULL);
El truco es usar tarchivedetector. NULL al atravesar los árboles de directorio.