[英]Zip4j: Name mismatch for splits
打电话后
createZipFileFromFolder(源,参数,true,splitSize)
所生成的文件名不匹配的物理名称但只适用于splited文件编号10因此由函数getSplitZipFiles产生()的名称将是“filename.z010”,而真正的文件名存储是“filename.z10”。
知道为什么吗? 以及如何解决
File outFile = new File(out_zip);
ZipFile zipFile = new ZipFile(out_zip);
ZipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
zipFile.createZipFileFromFolder(source, parameters, true, splitSize);
splitZipFiles = zipFile.getSplitZipFiles();
似乎是“ zip4j”中的错误。
这是因为'Zip4jUtil'类中的这种逻辑。 对于文件号9,if条件失败,但fileExt仍为'.z0',并将+1添加到文件名。 相反,条件应该是if(i> = 9)以匹配文件创建逻辑。
for (int i = 0; i <= numberOfThisDisk; i++) {
if (i == numberOfThisDisk) {
retList.add(zipModel.getZipFile());
} else {
String fileExt = ".z0";
if (i > 9) {
fileExt = ".z";
}
partFile = (zipFileName.indexOf(".") >= 0) ? currZipFile.substring(0, currZipFile.lastIndexOf(".")) : currZipFile;
partFile = partFile + fileExt + (i + 1);
retList.add(partFile);
}
}
但是,在“ SplitOutputStream”类中创建实际的拆分文件时,可以使用逻辑来生成正确的文件名。 下面的代码将生成“ .z10”文件,而不是“ .z010”文件。
if (currSplitFileCounter < 9) {
currSplitFile = new File(parentPath + zipFileWithoutExt + ".z0" + (currSplitFileCounter + 1));
} else {
currSplitFile = new File(parentPath + zipFileWithoutExt + ".z" + (currSplitFileCounter + 1));
}
因此文件创建很好,问题在于列出文件时的逻辑。
1)将错误报告提交给开发团队,同时从http://www.lingala.net/zip4j/download.php
获取“ zip4j
”的源代码。
2)然后将' Zip4jUtil.java
'@行:690中的逻辑if(i>9) to if(i>=9)
。创建二进制.jar文件,并将其在您的应用程序中使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.