java中解压缩zip的中文问题

这段时间解决解压缩中文问题,但是对于中文的压缩文件,总是出错,查了很多帖子,发现很多人都遇到这种情况,我刚刚解决这个问题,因此提出来,希望能够对你有所帮助。(多说一句,我看到很多帖子的回答者,并不一定真正的测试过这段代码,就将别人以前所贴得代码,一并粘过来,并且还是很高深的那种,殊不知很多提问着照着你贴得代码就试验,结果浪费了很多时间,因此希望有些人不要只是为了一些分,就将别人以前回答的帖子粘来粘去),说多了,多多包涵。
    用java 自带的zip类,我没有实现解压缩中文问题,不知是否我的方法不对,但是我目前采用了ant.jar,利用这个jar文件,的确可以实现解压缩中文问题。我将这个jar文件放在了我的机器上,大家可以下载ftp://202.97.215.161 
user:zy
pass:1234
先杀毒,我机器好几天没杀毒了。
而引用这个jar包解压缩的源码如下:
package com.highcom.hcgip.basic.unzip;

/**
 * <p>Title: gip3.1 JavaDoc</p>
 * <p>Description:利用org.apache.tools.zip解决了解压zip时中文名称出错的情况 </p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: </p>
 * @author zy
 * @version 1.0
 */

import java.util.*;
import java.util.zip.*;
import java.io.*;

public class TryUnzip {
    public TryUnzip() {
    }

    /**
     *
     * 解压处理
     * @param zipFileName 要进行压缩处理的文件(d://aa.zip")
     * @param outputDirectory 压缩处理后的文件路径(d://)
     */
    public void unzip(String zipFileName,String outputDirectory) throws Exception{
        try {
            org.apache.tools.zip.ZipFile zipFile = new org.apache.tools.zip.ZipFile(zipFileName);
            java.util.Enumeration e = zipFile.getEntries();

            org.apache.tools.zip.ZipEntry  zipEntry = null;

            while (e.hasMoreElements()){
              zipEntry = (org.apache.tools.zip.ZipEntry)e.nextElement();
              System.out.println("unziping "+zipEntry.getName());
              if (zipEntry.isDirectory()){
                String name=zipEntry.getName();
                name=name.substring(0,name.length()-1);
                System.out.println("输出路径:"+outputDirectory+File.separator+name);
                File f=new File(outputDirectory+File.separator+name);
                f.mkdir();
                System.out.println("创建目录:"+outputDirectory+File.separator+name);

              }else{
                File f=new File(outputDirectory+File.separator+zipEntry.getName());
                f.createNewFile();
                InputStream in = zipFile.getInputStream(zipEntry);
                FileOutputStream out=new FileOutputStream(f);
                //--------解决了图片失真的情况
                int c;
                byte[] by=new byte[1024];
                while((c=in.read(by)) != -1){
                    out.write(by,0,c);
                }
                out.close();
                in.close();
              }
            }

        }
        catch (Exception ex) {

        }


    }

    public static void main(String[] args){
    try{
        TryUnzip test = new TryUnzip();
        test.unzip("e://ok.zip","e://");
    }catch(Exception e){e.printStackTrace(System.out);}
    }

}

说明:1。由于明天休息,所以可能ftp就不开,所以希望下到的人多帮助那些没下到的人
2。必须为zip压缩文件,rar不行,并且目前只支持这种压缩格式
ok.zip
    -----测试.txt
    -----78.jpg
而这种目前不支持(就是压缩文件下为一个文件夹,文件夹中包含相应压缩文件,有时间我在做做)
ok.zip
    -----test/测试.txt
    -----test/78.jpg


对了,我的环境为
os:2003,jublder8,jrun4.
同时大家也要注意org.apache.tools.zip这个包在有些webserver中就有,所以你要是试验不成功,找找webserver中是否已经存在org.apache.tools.zip这个包,jrun4就有,害得我又从新写了一个jar包

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值