遍历所有目录中的zip文件的java(iterating over all directories

2019-09-18 01:35发布

我目前正在开发一个工具,让我修改压缩文件的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

我期待像模型/基线/ 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();
        }

Answer 1:

一旦你检查现有的文件夹目录,那么你需要反复经过的每个目录中的文件,并处理每这些的。

例:

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目录



Answer 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文件的目录项是完全可选的。



文章来源: iterating over all directories in a zip file java
标签: java hash zip md5