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的对应类。