java 解压zip文件,java.lang.IllegalArgumentException: MALFORMED[1]

在做zip文件解压缩的时候碰到一个异常信息,见下面的异常详情:


java.lang.IllegalArgumentException: MALFORMED[1]
    at java.util.zip.ZipCoder.toString(ZipCoder.java:65) ~[na:1.8.0_181]
    at java.util.zip.ZipFile.getZipEntry(ZipFile.java:583) ~[na:1.8.0_181]
    at java.util.zip.ZipFile.access$900(ZipFile.java:60) ~[na:1.8.0_181]
    at java.util.zip.ZipFile$ZipEntryIterator.next(ZipFile.java:539) ~[na:1.8.0_181]
    at java.util.zip.ZipFile$ZipEntryIterator.nextElement(ZipFile.java:514) ~[na:1.8.0_181]
    at java.util.zip.ZipFile$ZipEntryIterator.nextElement(ZipFile.java:495) ~[na:1.8.0_181]
 

代码:



    org.apache.commons
    commons-compress
    1.16.1
ZipFile zipFile = new ZipFile(new File(filePath));

这种网上查下,很快定位问题,就是编码问题

然后各种查获取zip文件的编码,最多的就是cpdetector工具

https://blog.csdn.net/u014052432/article/details/79243496

pom:


    cpdetector
    cpdetector
    1.0.10

如果下不了的自行网上下载jar到对应的本地目录内,现在网上还真不好找这个jar,我是github内找到的

代码都编写好了,进行测试,确实能获取zip文件的编码,但是异常现象依旧存在。

然后又是各种 “zip获取编码”的查找,终于发现一篇:

guying4875大神写的博客:https://blog.csdn.net/guying4875/article/details/81034022

拷贝代码测试,顺利通过

修改后的代码:

String fileEncode = EncodeUtil.getEncode(filePath,true);
ZipFile zipFile = new ZipFile(new File(filePath), Charset.forName(fileEncode));

问题解决

再次感谢@guying4875

 

 

 

 

你可能感兴趣的:(经验总结)