前一阵做的项目里有JAVA后台处理ZIP压缩文件的业务,通过使用JAVA自带的ZIP UTIL进行了处理。参考代码如下:
URL url=new URL("file://"+remotePath+downloadFileName);
File f=new File(url.toURI());
ZipInputStream zis = new ZipInputStream(new FileInputStream(f));
ZipEntry entry;
while ((entry = zis.getNextEntry()) != null) {
zos.putNextEntry(new ZipEntry (entry.getName()));
while ((count = zis.read(data, 0, 10240)) != -1) {
zos.write(data, 0, count);
}
}
代码写完后自己测试了一下没有问题就上传了,但是到真正的生产系统就报异常。网上查了一下发现java解压ZIP,如果含有中文就会报异常,因为jdk提供的方法只能按UTF-8编码方式处理。为了解决中文的问题,我们将jdk自带的包进行修改。将这几个类单独新建一个工程:
DeflaterOutputStream.java
InflaterInputStream.java
ZipConstants.java
ZipEntry.java
ZipInputStream.java
ZipOutputStream.java
主要是修改三个java文件,修改ZipInputStream.java 里的getUTF8String方法,在函数最上面添加支持GBK方式的编码:
try
{
String s = new String(b, off, len, "GBK");//以GBK的方式
return s;
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
修改ZipEntry,将
//static {
/* Zip library is loaded from System.initializeSystemClass */
//initIDs();
//}注释
修改ZipOutputStream,将函数getUTF8Bytes原来的处理注释,增加gbk方式:
try {
return s.getBytes("gbk");
} catch (UnsupportedEncodingException e) {
return getUTF8Bytes(s);
}
}
进行以上修改后,将工程打包,在代码里引用工程里的jar包就可以了。
我自己做好的jar包可以参考附件。
http://download.csdn.net/detail/u010953124/8152473