2012-06-12 55 views
6

我目前正在开发一个工具,它允许我修改zip文件的md5。该文件的目录结构看起来像遍历zip文件中的所有目录java

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

然而,当我跑我的代码,没有这些目录的越来越迭代成。输出给我:

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

我期待的东西像模型/基线/ somefile.xml出现在输出,但它没有。有什么想法吗?

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(); 
     } 

回答

3

一旦您检查到现有文件夹是目录,那么您需要迭代遍历目录中的每个文件并处理它们中的每个文件。

实施例:

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); 
} 

结帐这个问题,它详细过程良好。 Iterating inside directories in Java

+1

对钱的权利 – cybertextron

2

我认为你的代码是完美的。我怀疑你的zip文件不包含目录。他们不需要!

例如,这是我用“a/b/c/d.txt”创建的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 

但后来我删除从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/ 

,现在当我列出的内容,果然,只有该文件出现。这些目录都不见了:

$ 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 

注:当我解压此相同的文件,它提取d.txt文件之前创建的A/B/C /目录下,即使压缩指数本身不包含目录。所以它看起来像zip文件中的目录条目是完全可选的。

相关问题