2010-06-24 25 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最初是为了存档一个目录结构,因此它期望文件名是唯一的。您可以添加目录以保持文件分离(并提供额外的信息以区分它们,如果需要的话)。