JAVA zip解压 MALFORMED 错误

最近在在使用zip 解压时,使用JDK1.7及以上版本在解压时,某些文件会报异常

Exception in thread "main" java.lang.IllegalArgumentException: MALFORMED
    at java.util.zip.ZipCoder.toString(ZipCoder.java:58)
    at java.util.zip.ZipFile.getZipEntry(ZipFile.java:567)
    at java.util.zip.ZipFile.access$900(ZipFile.java:61)
    at java.util.zip.ZipFile$ZipEntryIterator.next(ZipFile.java:525)
    at java.util.zip.ZipFile$ZipEntryIterator.nextElement(ZipFile.java:500)
    at java.util.zip.ZipFile$ZipEntryIterator.nextElement(ZipFile.java:481)
    at zip.ReadingArchive.unzip(ReadingArchive.java:36)
    at zip.ReadingArchive.unzip(ReadingArchive.java:82)
    at zip.ReadingArchive.unzip(ReadingArchive.java:82)
    at main.Main.main(Main.java:13)

究其原因是因为文件名中文所致,而ZIPFile默认使用UTF-8,在遇到解压非UTF-8的时候就会报错
public ZipFile(File file, int mode) throws IOException {    this(file, mode, StandardCharsets.UTF_8);}

最终我用的解决方法为
Charset gbk = Charset.forName("GBK");ZipFile zipFile = new  ZipFile(zipFileName, gbk);

当然这个肯定不适用与所有环境,可以使用的修改字符集来解决,仅供参考。
时间: 2024-10-29 12:25:00

JAVA zip解压 MALFORMED 错误的相关文章

windows下tomcat zip解压版安装方法

下面记录一下在win7(32位)系统下,安装zip解压版的方法: 一.下载zip压缩包 地址:http://tomcat.apache.org/download-80.cgi 二.解压 我把解压包解压放在了D盘下,具体的路径是:D:\Java IDE\apache-tomcat-8.0.39 三.配置jdk到tomcat 在tomcat安装目录下的bin目录中有startup.bat和shutdown.bat这两个文件, 都使用记事本打开,在第一行"@echo off"的下一行追加新行

20140220-MySQL的安装(使用zip解压绿色安装方式)

20140220-MySQL的安装(使用zip解压绿色安装方式) 谷歌输入MySQL可以直接找到官网的下载地址.下载绿色版. 选择:MySQL Community Server. 如果你已经安装了MySQL可以先执行: (1)停止MySQL的服务:net stop mysql(不需要分号) (2)移除MySQL的服务:mysqld remove(不需要分号) 安装步骤 1.将压缩包解压,复制到指定位置: 2.添加环境变量: 将以下目录添加到环境变量path中:F:\app\mysql-5.6.1

zip解压线程(解决中文问题)

准备工作: android自带的zip解压不能处理中文文件名,需要引用第三方jar apache的commons-compress 1.12 http://central.maven.org/maven2/org/apache/commons/commons-compress/1.12/commons-compress-1.12.jar 下载下来,放到app的libs目录 as转换到project视图 右击那个jar 然后: 就会在build.gradle(module:app)自动添加: im

CentOS7下zip解压和unzip压缩文件

1.安装zip.unzip应用. yum install zip unzip 2.压缩和解压文件 以下命令均在/home目录下操作 cd /home #进入/home目录 a.把/home目录下面的mydata目录压缩为mydata.zip zip -r mydata.zip mydata #压缩mydata目录 b.把/home目录下面的mydata.zip解压到mydatabak目录里面 unzip mydata.zip -d mydatabak c.把/home目录下面的abc文件夹和12

解决ubuntu中zip解压的中文乱码问题

在解压windows传过来的zip文件时,才会出现乱码.所以,我用另一个方法解决中文乱码问题. 安装 代码: sudo apt-get install unar 12.04以下或者想编译安装的朋友请参考: 使用 代码: lsar foo.zip #列出所有文件 如果列出的文件名已经正确 代码: unar foo.zip #解压所有文件 如果列出的文件名还不正确 代码: lsar -e GB18030 foo.zip #指定使用GB18030编码列出所有文件 unar -e GB18030 foo

zip解压及zip炸弹的防御

解压功能验证正常,zip炸弹防御部分还没验证完,后续验证后再确认 private static final int MAX_COUNT = 10000; // 注意,long类型后面要加L private static final long MAX_SIZE = 4L * 1024 * 1024 * 1024; private static final int PATH_LENGTH = 512; /** * zip解压及zip炸弹的防御 * 防御要点:1.校验解压后文件大小 2.校验解压后的条

java.util.zip压缩打包文件总结二: ZIP解压技术

一.简述 解压技术和压缩技术正好相反,解压技术要用到的类:由ZipInputStream通过read方法对数据解压,同时需要通过CheckedInputStream设置冗余校验码,如: CheckedInputStream cis = new CheckedInputStream(new FileInputStream( srcFile), new CRC32()); ZipInputStream zis = new ZipInputStream(cis); 需要注意的是,在构建解压文件时,需要

java代码解压zip文件

import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.springframework.stereoty

java压缩解压zip文件,中文乱码还需要ant.jar包

va] view plaincopyprint? package cn.cn; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; i