解析zip包报错:java.lang.IllegalArgumentException: MALFORMED 解决方法
在做 zip 文件解压功能时报如下异常:
java.lang.IllegalArgumentException: MALFORMED
at java.util.zip.ZipCoder.toString(ZipCoder.java:58)
at java.util.zip.ZipFile.getZipEntry(ZipFile.java:566)
at java.util.zip.ZipFile.access$900(ZipFile.java:60)
at java.util.zip.ZipFile$ZipEntryIterator.next(ZipFile.java:524)
at java.util.zip.ZipFile$ZipEntryIterator.nextElement(ZipFile.java:499)
at java.util.zip.ZipFile$ZipEntryIterator.nextElement(ZipFile.java:480)
at com.kmvc.hbtowergather.until.ZipUtil.unzip(ZipUtil.java:30)
at com.kmvc.hbtowergather.until.ZipUtil.main(ZipUtil.java:16)
原因:
zip文件里含有中文名称的文件,windows 环境下,默认字符集为GBK,ZipFile 默认使用 UTF-8 字符集,当文件名存在中文时,处理时就会报错。
解决方法:
创建 ZipFile 时,设置字符集为GBK(JDK 1.7以上)
try (ZipInputStream zis = new ZipInputStream(file.getInputStream(), Charset.forName("GBK"))) {
ZipEntry nextEntry = zis.getNextEntry();
zis.close();
} catch (IOException e) {
}
ZipFile zipfile = new ZipFile(filePath, Charset.forName("GBK"));
欢迎关注公众号:慌途L
后面会慢慢将文章迁移至公众号,也是方便在没有电脑的情况下可以进行翻阅,更新的话会两边同时更新,大家不用担心!