2012-06-12 91 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文件中的目錄條目是完全可選的。

相關問題