代码之家  ›  专栏  ›  技术社区  ›  Jacob Mattison

创建zip存档时,什么构成重复条目?

  •  2
  • Jacob Mattison  · 技术社区  · 14 年前

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

    问题:在执行“putNextEntry()”行时,有时会得到“zipException:Duplicate Entry”。

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

    3 回复  |  直到 11 年前
        1
  •  2
  •   nos    11 年前

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

    在技术上,zip文件格式允许这样做,但是用于处理zip档案的Java API没有。

        2
  •  0
  •   user207105    14 年前

    是——如果需要保存多个同名文件,可以在zip文件中使用目录结构。

        3
  •  0
  •   Curtis    14 年前

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