创建zip存档时,构成重复条目的内容

时间:2010-06-24 20:16:13

标签: java zip duplicates zipfile

在Java Web应用程序中,我正在从各种内存中的文件创建一个zip文件(存储为byte [])。

这是代码的关键部分:

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

问题:在执行“putNextEntry()”行时,我有时会收到“ZipException:重复条目”。

PDF文件本身肯定会有所不同,但它们可能具有相同的名称(“PDF_File_for_John_Smith.pdf”)。名称冲突是否足以导致此异常?

3 个答案:

答案 0 :(得分:2)

您不能在zip存档(在同一文件夹中)中存储2个具有相同名称的条目,就像在文件系统中的同一文件夹中不能有2个具有相同名称的文件一样。

编辑;虽然从技术上讲,zip文件格式允许这样做,但用于处理ZIP存档的Java API却没有。

答案 1 :(得分:0)

是 - 如果您需要使用相同的文件名保存多个文件,则可以在ZIP文件中使用目录结构。

答案 2 :(得分:0)

我相信。 Zip最初用于存档目录结构,因此它希望文件名是唯一的。您可以添加目录以保持文件分离(如果需要,还可提供额外信息以区分它们)。