JAVA后台处理带有中文名称的ZIP压缩文件

                 前一阵做的项目里有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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值