2012-03-29 120 views
0

如何使用Java在Zip文件中讀寫評論?如何從Zip文件讀取評論?

我可以這樣寫評論:

FileOutputStream fos = new FileOutputStream(output); 
ZipOutputStream zos = new ZipOutputStream(fos); 
zos.setComment("BMC Comment"); 
+0

按照[來源](HTTP://www.jarvana。 com/jarvana/view/ant/ant/1.5.1/ant-1.5.1-sources.jar!/org/apache/tools/zip/ZipOutputStream.java?format = ok),文件註釋寫在壓縮文件的_end_。 'ZipInputStream'中似乎沒有任何內容可以訪問這些數據,但是可能只需從文件末尾(手動)向後搜索就可以得到它。 – aroth 2012-03-29 04:28:03

+0

是啊...我剛剛讀了使用你的方法的冰雹鏈接...我想我沒有太多的選擇... – 2012-03-29 04:33:37

回答

4

檢查這個帖子:

編輯:不幸的是,原來的鏈接現已無法使用,這裏有一個網頁檔案連結:

http://web.archive.org/web/20100117212418/http://www.flattermann.net:80/2009/01/read-a-zip-file-comment-with-java/

對於後人,這裏的要點(略格式):

private static String getZipCommentFromBuffer (byte[] buffer, int len) { 
    byte[] magicDirEnd = {0x50, 0x4b, 0x05, 0x06}; 
    int buffLen = Math.min(buffer.length, len); 

    // Check the buffer from the end 
    for (int i = buffLen - magicDirEnd.length - 22; i >= 0; i--) { 
    boolean isMagicStart = true; 

    for (int k = 0; k < magicDirEnd.length; k++) { 
     if (buffer[i + k] != magicDirEnd[k]) { 
     isMagicStart = false; 
     break; 
     } 
    } 

    if (isMagicStart) { 
     // Magic Start found! 
     int commentLen = buffer[i + 20] + buffer[i + 21] * 256; 
     int realLen = buffLen - i - 22; 
     System.out.println ("ZIP comment found at buffer position " 
     + (i + 22) + " with len = " + commentLen + ", good!"); 

     if (commentLen != realLen) { 
     System.out.println ("WARNING! ZIP comment size mismatch: " 
      + "directory says len is " + commentLen 
      + ", but file ends after " + realLen + " bytes!"); 
     } 

     String comment = new String (buffer, i + 22, Math.min(commentLen, realLen)); 
     return comment; 
    } 
    } 

    System.out.println ("ERROR! ZIP comment NOT found!"); 
    return null; 
} 
+0

我剛剛發現該網站就在你給出答案之前... :) 這是不是一個直接的方式來做到這一點..但它也做的伎倆^^ 謝謝反正......我選擇這個作爲一個現在的答案:) – 2012-03-29 04:35:17

+0

鏈接已死,會很高興有相關部分的答案[:-( – 2017-07-14 10:26:32

+0

@CarlosHeuberger謝謝,更新! – 2017-07-15 18:51:35

4

嘗試:

java.util.zip.ZipFile.getComment()

+0

這比接受的答案要容易得多 – Aerilys 2014-12-29 07:29:14

+0

嗯,我錯過了OP想要閱讀單個ZIP *文件*評論,而不是ZIP *條目*評論。 – 2014-12-29 11:25:47