java 解压zip 中文问题完美解决
用过java做压缩或解压的都知道,jdk提供的zip只能按UTF-8格式处理,前些天写过一篇压缩zip的中文问题,就是使用ant包里的类,并且在linux上稍做些修改也能兼容,但是,如果是解压一个包含中文文件名的zip包呢? 此时如果使用jdk自带的zip包,解压时如果文件名有中文,会抱非法参数异常,而如果使用ant包。会发现ant.jar里并没有ZipInputStream,怎么办?
看来,我们还是得使用jdk里的zip包了,我们的问题仅仅是需要支持GBK,所以修改应该不会很大,所以我们先找出所有相关的类,以下类请自行从jdk的src.zip里提取
initIDs()方法是在ZipEntry类的static里调用的,目前还不大清楚这个到底做什么用,我们只需要在ZipEntry类中找到这个static模块,注释掉就行了,
1 楼 sdyjmc 2011-08-22 最好对传入的输出路径做判断,另外
File f = new File(outputDirectory + File.separator + z.getName());
System.out.println(f.getAbsolutePath());
if(!f.getParentFile().exists()){
f.getParentFile().mkdirs();
}
f.createNewFile();
/*initIDs();*/ 也要注释掉。
static {
/* Zip library is loaded from System.initializeSystemClass */
/*initIDs();*/
}