2012-06-12 9 views
6

Actualmente estoy desarrollando una herramienta que me permitiría modificar el md5 de un archivo zip. La estructura de directorios del archivo se ve comoiterando sobre todos los directorios en un archivo zip java

  baselines-> 
models -> icons -> 
      lang  -> 
      (a bunch of files here) 

Sin embargo, cuando ejecuto mi código, ninguno de esos directorios son cada iteración a entrar. La salida me da:

Name:model/visualization_dependency.xml 
Name:model/visualization_template.xml 
Name:model/weldmgmt_dependency.xml 
Name:model/weldmgmt_template.xml 

que estaba esperando a algo como modelo/línea de base/somefile.xml aparece 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(); 
     } 

Respuesta

3

Una vez que compruebe que la carpeta existente es el directorio, deberá recorrer cada uno de los archivos del 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); 
} 

Pedido esta pregunta, detalla proceso bien. Iterating inside directories in Java

+1

justo en el dinero – cybertextron

2

Creo que su 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 inicialmente creé los directorios se añadieron 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 entonces me borran los directorios del índice postal:

$ 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 hice una lista de su contenido, por supuesto, 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 la cremallera de este mismo archivo, se creó el/b/c/directorio antes de extraer el archivo d.txt, a pesar de que el índice de cremallera en sí no contenía directorios. Por lo tanto, parece que las entradas de directorio en archivos zip son completamente opcionales.

Cuestiones relacionadas