迭代zip文件java中的所有目录

cyb*_*ron 6 java hash zip md5

我正在开发一个允许我修改zip文件的md5的工具.该文件的目录结构如下

          baselines->
models -> icons    ->
          lang     ->
          (a bunch of files here)
Run Code Online (Sandbox Code Playgroud)

但是,当我运行我的代码时,这些目录都没有进入迭代.输出给了我:

Name:model/visualization_dependency.xml
Name:model/visualization_template.xml
Name:model/weldmgmt_dependency.xml
Name:model/weldmgmt_template.xml
Run Code Online (Sandbox Code Playgroud)

我期待输出上出现类似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();
        }
Run Code Online (Sandbox Code Playgroud)

Rac*_*hel 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);
}
Run Code Online (Sandbox Code Playgroud)

查看这个问题,它详细说明了过程。 在 Java 中迭代目录