繁体   English   中英

Zip4j:拆分名称不匹配

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM