2012-06-12 11 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ファイルを次に示します。私が最初にそれを作成したときにディレクトリが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 -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ファイルのディレクトリエントリは完全にオプションです。

関連する問題