java解压zip文件,处理文件名不能为中文

来源:互联网 发布:51淘宝小号交易平台 编辑:程序博客网 时间:2024/04/28 02:16



1、最近工作需要把压缩文件解压,经过测试有两种方法,一种是JDK自带的ZipFile,

      另外一种是org.apache.tools.zip进行解压。

2、经测试,JDK自带的文件不能处理文件名为中文的压缩文件(包括压缩文件包含的文件名)

     原因是:压缩解压ZIP文件对文件名都是以UTF-8编码方式来处理的,而WinZip对文件名只会

    以ASCII编码方式来处理

3、解决办法:Apache Ant有个包专门处理ZIP文件,可以指定文件名的编码方式。由此可以解决问题。

4、代码如下:

   说明:zipFileName是文件的绝对路径(包含文件名称),outputDirectory是输出路径(不包含名称)

比如:zipFileName=D:\\pdf\\zip\\test测试.zip

outputDirectory=D:\\pdf\\zip 

        如需共同讨论请联系QQ:470312712     

public static void unZip(String zipFileName, String outputDirectory)throws Exception {
try {
ZipFile zipFile = new ZipFile(zipFileName, "GB2312");
Enumeration e = zipFile.getEntries();
ZipEntry zipEntry = null;
createDirectory(outputDirectory, "");
while (e.hasMoreElements()) {
zipEntry = (ZipEntry) e.nextElement();
System.out.println("unziping " + zipEntry.getName());
if (zipEntry.isDirectory()) {
String name = zipEntry.getName();
name = name.substring(0, name.length() - 1);
File f = new File(outputDirectory + File.separator + name);
f.mkdir();
System.out.println("创建目录:" + outputDirectory+ File.separator + name);
} else {
String fileName = zipEntry.getName();
fileName = fileName.replace('\\', '/');
if (fileName.indexOf("/") != -1) {
createDirectory(outputDirectory, fileName.substring(0,fileName.lastIndexOf("/")));
fileName = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length());
}

File f = new File(outputDirectory + File.separator+ zipEntry.getName());
f.createNewFile();
InputStream in = zipFile.getInputStream(zipEntry);
FileOutputStream out = new FileOutputStream(f);
byte[] by = new byte[1024];
int c;
while ((c = in.read(by)) != -1) {
out.write(by, 0, c);
}
out.close();
in.close();
}
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}

0 0
原创粉丝点击