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)。名称冲突是否足以导致此异常
# 1 楼答案
不能在zip存档(在同一文件夹中)中存储两个同名条目,就像文件系统中不能在同一文件夹中存储两个同名文件一样
编辑;虽然技术上zip文件格式允许这样做,但用于处理zip存档的JavaAPI却不允许这样做
# 2 楼答案
我相信是这样。Zip最初用于归档目录结构,因此它希望文件名是唯一的。您可以添加目录以保持文件的分隔(如果需要,还可以提供额外的信息来区分它们)
# 3 楼答案
是的,如果需要保存多个具有相同文件名的文件,可以在ZIP文件中使用目录结构