java 打包zip路径中文_解决java中ZipFile解压缩时候的中文路径和乱码问题

JAVA中对jar文件或zip文件解压的时候,可以使用JDK内置的API:JarFile和ZipFile,在windows下解压这2种格式文件的时候,经常报以下错误:

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: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格式。

原文:http://blog.csdn.net/aitangyong/article/details/40430467

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值