2012-06-12 31 views
6

Tôi hiện đang phát triển một công cụ cho phép tôi sửa đổi md5 của tệp zip. Cấu trúc thư mục của tệp trông giống nhưlặp qua tất cả các thư mục trong một tệp zip java

  baselines-> 
models -> icons -> 
      lang  -> 
      (a bunch of files here) 

Tuy nhiên, khi tôi chạy mã của mình, không có thư mục nào trong số đó đang chuyển đổi. Đầu ra cung cấp cho tôi:

Name:model/visualization_dependency.xml 
Name:model/visualization_template.xml 
Name:model/weldmgmt_dependency.xml 
Name:model/weldmgmt_template.xml 

Tôi đã mong đợi một cái gì đó như mô hình/đường cơ sở/somefile.xml xuất hiện trên đầu ra, nhưng nó không. Bất kỳ suy nghĩ nào?

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

Trả lời

3

Khi bạn kiểm tra thư mục hiện có là thư mục thì bạn cần duyệt qua từng tệp trong thư mục và xử lý từng tệp trong thư mục đó.

Ví dụ:

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

Thanh toán câu hỏi này, nó chi tiết quá trình tốt. Iterating inside directories in Java

+1

ngay trên tiền – cybertextron

2

Tôi nghĩ mã của bạn là hoàn hảo. Tôi nghi ngờ tệp zip của bạn không chứa thư mục. Họ không phải!

Ví dụ: đây là tệp zip tôi đã tạo bằng "a/b/c/d.txt". Khi tôi bước đầu tạo ra nó các thư mục đã được thêm vào tập tin 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 

Nhưng sau đó tôi đã xóa các thư mục từ chỉ số 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/ 

Và bây giờ khi tôi liệt kê nội dung của nó, chắc chắn đủ, chỉ tệp xuất hiện. Các thư mục đã mất hết:

$ 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 

Lưu ý: khi tôi giải nén tập tin này cùng, nó đã tạo ra a/b/c/thư mục trước khi giải nén các tập tin d.txt, mặc dù chỉ số zip bản thân không chứa thư mục. Vì vậy, có vẻ như mục nhập thư mục trong các tệp zip là hoàn toàn tùy chọn.

Các vấn đề liên quan