2

在 Java Web 应用程序中,我正在从各种内存文件(存储为 byte[])创建一个 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();

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

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

4

3 回答 3

3

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

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

于 2010-06-24T20:20:03.680 回答
0

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

于 2010-06-24T20:19:58.750 回答
0

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

于 2010-06-24T20:20:50.853 回答