2010-06-24 139 views
2

在我創造各種內存文件的zip文件中的Java Web應用程序(存儲爲字節[])。當創建一個zip壓縮包,什麼是重複的條目

這裏的代碼鍵位:

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    ZipOutputStream zos = new ZipOutputStream(baos); 
    for (//each member of a collection of objects) { 

     PDFDocument pdfDocument = //generate PDF for this member of the collection; 
     ZipEntry entry = new ZipEntry(pdfDocument.getFileName()); 
     entry.setSize(pdfDocument.getBody().length); 
     zos.putNextEntry(entry); 
     zos.write(pdfDocument.getBody());//pdfDocument.getBody() returns byte[] 
     zos.closeEntry(); 
    } 
    zos.close(); 

的問題:我有時會得到一個「拋出:ZipException:重複條目」做的時候「putNextEntry()」行。

的PDF文件本身肯定會有所不同,但它們可能具有相同的名稱(「PDF_File_for_John_Smith.pdf」)。名稱衝突是否足以導致此異常?

+0

謝謝,所有。我添加了代碼,以便在生成文件名時將其添加到哈希中,並在名稱已被使用時添加一個數字。 – 2010-06-24 20:37:57

+0

感謝您的提問;它幫我找出使用Java語言編寫的zip文件時,我應該如何避免重複;) – Stephen 2011-05-05 12:24:30

回答

2

不能存儲2項在zip存檔相同名稱相同(相同的文件夾),就像你不能在文件系統中的同一文件夾中兩個文件具有相同的名稱。

編輯;雖然技術上zip文件格式允許這樣做,但用於處理ZIP壓縮文檔的Java API卻沒有。

+1

請注意,這其實是一個矛盾的ZIP文件格式的規格,但該規範是完全愚蠢的,不應該被遵循:) – Esko 2010-06-24 20:21:23

+3

-1,您可以將2個具有相同名稱的條目存儲在同一個文件夾中的ZIP存檔中。 – dstibbe 2012-07-19 09:27:14

+2

@dstibbe不使用Java壓縮包。 – nos 2012-07-19 09:28:14

0

是 - 您可以使用目錄結構的ZIP文件中,如果你需要將與文件名相同的多個文件。

0

我相信如此。 Zip最初是爲了存檔一個目錄結構,因此它期望文件名是唯一的。您可以添加目錄以保持文件分離(並提供額外的信息以區分它們,如果需要的話)。