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包

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
解压缩zip文件含有中文名的文件时,可能会出现乱码或者解压失败的问题。这是因为在压缩文件时,文件名使用了默认编码格式,而在解压缩时,解压软件使用了不同的编码格式,导致文件名解析错误。 为了解决这个问题,可以通过指定解压缩文件名的编码格式来解决。以下是一个Java程序示例,用于解压缩zip文件并处理中文文件名的编码问题: ```java import java.io.*; import java.util.*; import java.util.zip.*; public class ZipUtils { public static void unzip(File zipFile, File destDir, String charset) throws IOException { if (!destDir.exists()) { destDir.mkdirs(); } ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFile), Charset.forName(charset)); ZipEntry entry; byte[] buffer = new byte[1024]; while ((entry = zipIn.getNextEntry()) != null) { String fileName = entry.getName(); if (entry.isDirectory()) { File subDir = new File(destDir, fileName); subDir.mkdirs(); continue; } File file = new File(destDir, fileName); File parent = file.getParentFile(); if (!parent.exists()) { parent.mkdirs(); } OutputStream out = new FileOutputStream(file); int len; while ((len = zipIn.read(buffer)) > 0) { out.write(buffer, 0, len); } out.close(); } zipIn.close(); } } ``` 在调用此方法时,可以指定解压缩文件名的编码格式,例如: ```java ZipUtils.unzip(new File("sun.zip"), new File("destDir"), "GBK"); ``` 这里的编码格式使用了GBK,根据实际情况可以修改为其他编码格式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值