在做 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以上)
如下:
ZipFile zipfile = new ZipFile(filePath, Charset.forName("GBK"));