java中zip压缩包的中文处理问题

来源:互联网 发布:苍之骑士团主角数据 编辑:程序博客网 时间:2024/05/14 05:00

java内置了对zip格式压缩文件的处理,常用的的几个类包括:



1、ZipFile


2、ZipInputStream


3、ZipOutputStream


4、ZipEntry


但在处理压缩文件中的中文入口时是会报IllegalArgumentException异常,但这并非是其不支持中文,而是因为其默认的压缩文件中的文字编码格式为unicode,而常用的压缩工具如WINZIP/WINRAR压缩后的文件中的文字编码格式为acsii,因此如果需要处理常用的ZIP文件,就必须手工来处理一下了。


常见的几种方式有:



1、修改相关类中的处理方式,关键代码如下(以ZipInputStream为例):


原代码: ZipEntry e = createZipEntry(getUTF8String(b, 0, len));


修改为:


 ZipEntry e = null;


//这里encoding是成员变量,可以在构建函数中赋值


if (encoding=null) e=createZipEntry(getUTF8String(b, 0, len));


else e=createZipEntry(new String(b, 0, len, encoding));


替换的方式也有三种:



1、创建替换类(在同一包名下),并替换rt.jar中的同名类


2、创建替换类(在同一包名下),单独打包并放在类路径中(但有些服务器可禁用java开头的包)


3、在应用中创建自己的类,随应用发布


2、使用ANT包中的org.apache.tools.zip中的相关类,但不包含ZipInputStream的对应类。