有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

在JavaWeb应用程序中,我从各种内存文件(存储为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:duplicate entry”

PDF文件本身当然会有所不同,但它们可能有相同的名称(“PDF文件”代表约翰·史密斯,PDF)。名称冲突是否足以导致此异常


共 (3) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

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

  3. # 3 楼答案

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