iterando sobre todos los directorios en un archivo zip java
Frecuentes
Visto 2,686 veces
6
Actualmente estoy desarrollando una herramienta que me permitiría modificar el md5 de un archivo zip. La estructura de directorios del archivo se parece a
baselines->
models -> icons ->
lang ->
(a bunch of files here)
Sin embargo, cuando ejecuto mi código, ninguno de esos directorios se itera. La salida me da:
Name:model/visualization_dependency.xml
Name:model/visualization_template.xml
Name:model/weldmgmt_dependency.xml
Name:model/weldmgmt_template.xml
Esperaba que algo como model/baseline/somefile.xml apareciera en la salida, pero no es así. ¿Alguna idea?
byte[] digest = null;
MessageDigest md5;
try {
md5 = MessageDigest.getInstance("MD5");
ZipEntry current;
while((current = entry.getNextEntry()) != null){
//ZipEntry current = entry.getNextEntry();
System.out.println("Size:" + current.getSize());
System.out.println("Name:" + current.getName());
if(current.isDirectory()){
digest = this.encodeUTF8(current.getName());
md5.update(digest);
}
else{
int size = (int)current.getSize();
digest = new byte[size];
entry.read(digest, 0, size);
md5.update(digest);
}
}
digest = md5.digest();
entry.close();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
2 Respuestas
3
Una vez que verifique que la carpeta existente es un directorio, debe revisar iterativamente cada archivo en el directorio y procesar cada uno de ellos.
Ejemplo:
if(current.isDirectory()){
System.out.println("Directory: " + file.getName());
//Get list of files by file.listFiles() and pass it to
// to other method that will do processing.
digest = this.encodeUTF8(current.getName());
md5.update(digest);
}
Echa un vistazo a esta pregunta, detalla bien el proceso. Iterando directorios internos en Java
contestado el 23 de mayo de 17 a las 12:05
2
Creo que tu código es perfecto. Sospecho que su archivo zip no contiene directorios. ¡No tienen que hacerlo!
Por ejemplo, aquí hay un archivo zip que creé con "a/b/c/d.txt". Cuando lo creé inicialmente, los directorios se agregaron al archivo zip:
$ unzip -l a.zip
Archive: a.zip
Length Date Time Name
--------- ---------- ----- ----
0 2012-06-12 14:22 a/
0 2012-06-12 14:22 a/b/
0 2012-06-12 14:22 a/b/c/
19 2012-06-12 14:22 a/b/c/d.txt
--------- -------
19 4 files
Pero luego eliminé los directorios del índice zip:
$ zip -d a.zip a/b/c
deleting: a/b/c/
$ zip -d a.zip a/b
deleting: a/b/
$ zip -d a.zip a
deleting: a/
Y ahora, cuando enumeré su contenido, efectivamente, solo aparece el archivo. Los directorios se han ido:
$ unzip -l a.zip
Archive: a.zip
Length Date Time Name
--------- ---------- ----- ----
19 2012-06-12 14:22 a/b/c/d.txt
--------- -------
19 1 file
Nota: cuando descomprimí este mismo archivo, creó el directorio a/b/c/ antes de extraer el archivo d.txt, aunque el índice zip en sí no contenía directorios. Entonces parece que las entradas de directorio en archivos zip son completamente opcionales.
Respondido el 12 de junio de 12 a las 22:06
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas java hash zip md5 or haz tu propia pregunta.