ZipInputStream使用错误

0 阅读1分钟

说明:记录一次读取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>

重试,读取没得问题

在这里插入图片描述

首次发布

hezhongying.blog.csdn.net/article/det…