解决java中ZipFile解压缩时候的中文路径和乱码问题
来源:互联网 发布:网上看房用什么软件 编辑:程序博客网 时间:2024/04/30 13:41
JAVA中对jar文件或zip文件解压的时候,可以使用JDK内置的API:JarFile和ZipFile,在windows下解压这2种格式文件的时候,经常报以下错误:
Exception in thread "main" java.lang.IllegalArgumentException: MALFORMEDat java.util.zip.ZipCoder.toString(ZipCoder.java:58)at java.util.zip.ZipFile.getZipEntry(ZipFile.java:531)at java.util.zip.ZipFile.access$900(ZipFile.java:56)at java.util.zip.ZipFile$1.nextElement(ZipFile.java:513)at java.util.zip.ZipFile$1.nextElement(ZipFile.java:483)
出现这种问题有2种可能:
1、拿到的zip或jar本身就是损坏的,这个时候可以使用winRAR等软件进行解压。
如果没有报错,那么可以证明:拿到的压缩文件是没有问题的。
2、字符集问题,zip或jar中含有中文的文件名或文件路径。
//windows下自己用winRAR压缩文件File file = new File("C:/Users/aty/Desktop/demo.zip");ZipFile zip = new ZipFile(file);Enumeration<? extends ZipEntry> entrys = zip.entries();while (entrys.hasMoreElements()) {ZipEntry entry = entrys.nextElement();System.out.println(entry.getName());}zip.close();
在windows下,将名称含有中文的文件或目录,用winRAR制作一个demo.zip文件,运行上面代码会发现抛异常。这是因为中文windows环境下,操作系统默认的字符集是GBK,但是ZipFile只能识别UTF-8格式。所以当zip文件中含有中文(但不是UTF-8编码)的时候,java的 ZipFile就会报错。
这个问题在JDK1.7及其之后,解决这个问题是很简单的。JDK提供了构造函数,允许我们指定zip文件的字符集。
public ZipFile(String name, Charset charset) throws IOException
如果在JDK1.6或之前,那么可以使用ant.jar中提供的org.apache.tools.zip.ZipFile,使用方式跟JDK1.7中的ZipFile很相似。
可以看到JDK1.7中ZipFile允许我们指定字符集,但是JarFile这个类还是固定使用UTF-8格式。
0 0
- 解决java中ZipFile解压缩时候的中文路径和乱码问题
- 解决python中用zipfile解压缩文件时中文文件名乱码的问题
- Java 压缩、解压缩文件(中文乱码问题已解决)
- java中解压缩zip的中文问题
- java解压缩文件,解决中文乱码。
- Java中解决访问地址中包含空格和中文路径的问题
- JAVA中应用AJAX的中文乱码问题的解决
- 解决Android下解压缩文件中文路径乱码
- java 中乱码或者中文问题的解决
- java开发中Mysql中文乱码问题的解决
- 解决Java中Web开发的中文乱码问题
- Java中解决中文乱码问题的方法
- java 中解决中文乱码问题的方法
- Java中解决中文乱码问题的一种方法
- java中怎么解决路径中文的问题
- jsp Textarea中解决中文乱码和换行的问题
- 解决mysql数据库储存中文时候出现乱码的问题
- ant解决压缩/解压缩中乱码问题
- 从海康的ps流中提取h264数据
- Spring实现定时任务
- scrollview can host only one direct child
- 在XEN环境中实现VLAN
- 保罗·格雷厄姆创业讲堂二:团队与执行
- 解决java中ZipFile解压缩时候的中文路径和乱码问题
- scikit-learn使用joblib持久化模型过程中的问题详解
- shell资料
- Core Data结构修改,升级,迁移,后,在AppStore中更新升级crash的问题.
- codeforces 431B Shower Line
- 第9周项目1-利用循环程序求和B
- AIX上Sybase15的安装
- cocos2dx A* + tiledMap(改良升级)
- Matlab之BP神经网络反向传播算法