说明:记录一次读取zip包中文件的错误,如下:
ZipInputStream zin = new ZipInputStream (FileUtil.getInputStream(path));
ZipEntry zipEntry;
while ((zipEntry = zin.getNextEntry()) != null) {
System.out.println(zipEntry);
}
场景
在项目里是将zip包中的文件读取出来,进行一系列操作,但是报下面的错误,非法参数异常
Exception in thread "main" java.lang.IllegalArgumentException: MALFORMED
at java.util.zip.ZipCoder.toString(ZipCoder.java:58)
at java.util.zip.ZipInputStream.readLOC(ZipInputStream.java:300)
at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:122)
理所当然的,排查到003.txt后面的文件是什么,这可能是导致错误的原因;
解决
是文件名有中文的原因,去掉就OK了。或者使用下面的代码,效果相同。
ZipArchiveInputStream zin = new ZipArchiveInputStream (FileUtil.getInputStream(path));
ZipArchiveEntry zipEntry;
while ((zipEntry = zin.getNextZipEntry()) != null) {
System.out.println(zipEntry);
}
需要导入下面依赖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.21</version>
</dependency>
重试,读取没得问题