6

私は現在、zipファイルのmd5を変更できるツールを開発しています。ファイルのディレクトリ構造は次のようになります

          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

model / baseline / 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();
        }
4

2 に答える 2

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

この質問をチェックしてください、それはプロセスをよく詳しく説明します。 Javaのディレクトリ内での反復

于 2012-06-12T21:14:08.297 に答える
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インデックスからディレクトリを削除しました:

$ 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

注:この同じファイルを解凍すると、zipインデックス自体にディレクトリが含まれていなくても、d.txtファイルを抽出する前にa / b /c/ディレクトリが作成されました。したがって、zipファイルのディレクトリエントリは完全にオプションのようです。

于 2012-06-12T21:27:17.023 に答える