问题描述
我尝试使用 Java 合并拆分的 zip 文件。但是我得到了意外结束的 ZLIB 输入流错误。对我做错了什么有任何想法吗?
File bigZip = new File("bigZip.zip");
List<String> zipList = Arrays.asList("src/14thmayreceipts.zip.001","src/14thmayreceipts.zip.002","src/14thmayreceipts.zip.003");
Collections.sort(zipList);
ZipOutputStream outputStream = new ZipOutputStream(new FileOutputStream(bigZip));
for (String entry : zipList) {
readWriteZip(outputStream,entry);
}
outputStream.close();
}
private static void readWriteZip(ZipOutputStream out,String fileName) throws IOException,EOFException {
File file = new File(fileName);
ZipInputStream inStream = new ZipInputStream(new FileInputStream(file));
byte[] buffer = new byte[1024];
int len = 0;
for (ZipEntry e; (e = inStream.getNextEntry()) != null; ) {
out.putNextEntry(e);
while ((len = inStream.read(buffer)) > 0) {
out.write(buffer,len);
}
}
inStream.close();
}
解决方法
JDK 的 zip 不支持拆分 zip 文件。此外,在使用拆分 zip 文件时,您无法使用输入/输出流。而且在合并拆分的 zip 文件时,必须更新 zip 文件中的许多标题。 zip4j 支持这样的功能。示例代码:
ZipFile zipFile = new ZipFile("splitZipFileThatHasToBeMerged.zip");
zipFile.mergeSplitZipFiles("mergedOutputZipFile.zip");