Zip文件系统中的Java IllegalArgumentException

时间:2018-11-27 15:40:29

标签: java zip illegalargumentexception

我有一个简单的应用程序,可以解压缩大量的Zip文件。它使用Files.walkFileTree()遍历所需的文件夹并将其解压缩到输出文件夹中。

有超过1600个zip文件。在极少数情况下(精确到3种),我得到了

Exception in thread "main" java.lang.IllegalArgumentException: MALFORMED[1]
    at jdk.zipfs/jdk.nio.zipfs.ZipCoder.toString(ZipCoder.java:90)
    at jdk.zipfs/jdk.nio.zipfs.ZipCoder$UTF8.toString(ZipCoder.java:64)
    at jdk.zipfs/jdk.nio.zipfs.ZipFileSystem.getString(ZipFileSystem.java:938)
    at jdk.zipfs/jdk.nio.zipfs.ZipPath.toString(ZipPath.java:603)
    at utilities.DazUnzipper$2.visitFile(DazUnzipper.java:149)
    at utilities.DazUnzipper$2.visitFile(DazUnzipper.java:1)
    at java.base/java.nio.file.Files.walkFileTree(Files.java:2724)
    at java.base/java.nio.file.Files.walkFileTree(Files.java:2796)
    at utilities.DazUnzipper.unZip(BatchUnzipper.java:146)
    at utilities.DazUnzipper.run(BatchUnzipper.java:104)
    at utilities.DazUnzipper.main(BatchUnzipper.java:171)

在所有这些失败情况下,有问题的zip文件都会使用7Zip正确解压缩。

我正在使用OpenJDK11。我已经看过ZipCoder的来源,我很困惑。 toString()方法将字节数组作为输入,对该字节数组进行一些处理,检查CoderResult.isUnderflow()的返回码,如果为false,则抛出IllegalArgumentException。

要引用该文档,请执行以下操作:

“当没有更多要处理的输入,或者输入不足,需要其他输入时,将报告下溢。此情况由唯一的结果对象UNDERFLOW表示,其isUnderflow方法返回true。”

0 个答案:

没有答案