根据 zip 格式规范http://en.wikipedia.org/wiki/Zip,可以将两个具有相同文件名的文件添加到单个 zip 存档文件中。例如,我会让拉链看起来像
foo.zip
--bar.txt
--bar.txt
--3rd.txt
Run Code Online (Sandbox Code Playgroud)
有谁知道要实现这个目标吗?我尝试了 linux 实用程序zip,unzip它总是覆盖以前添加的 zip 条目。Java 类 java.util.zip.ZipFile 也不起作用。
一种方法是首先使用唯一的名称创建 zip - 例如bar.txt、car.txt和3rd.txt。然后在二进制编辑器中打开生成的 zip 文件并搜索car.txt并将其替换为bar.txt。
请注意,需要替换的文件名应该出现两次 - 一次出现在文件的本地文件头中(在 zip 中间的某个位置),一次出现在中央目录中(靠近 zip 末尾的某个位置) 。
如果您需要以编程方式执行此操作,我建议您实际解析中央目录以查找各个标头中文件名的确切位置,而不是简单的搜索和替换以避免误报的机会。这不是一个非常复杂的格式。
请注意,当您尝试像这样解压缩 zip 时,在解压缩文件名的第二个副本时,您可能会收到有关文件已存在的警告,具体取决于您用于解压缩的程序以及您设置的选项。