`
JAVA天地
  • 浏览: 674234 次
  • 性别: Icon_minigender_1
  • 来自: 太原
文章分类
社区版块
存档分类
最新评论

java zip 中文问题

阅读更多
用ant解压包含中文文件名的压缩文件
中文问题是java中的普遍性问题.今天下午遇到一个包含中文文件名的压缩文件解压问题.找了不少资料.现贴出解集.
在java.util.zip包也可以用来处理解压问题,不过对含有中文文件名的压缩包无能为力,这是因为ZipOutputStream压缩和解压ZIP文件对文件名都是以UTF-8编码方式来处理的,而我们用winzip压缩文件对文件名只会以ASCII编码方式来处理.所以会出现编码不一致的问题.
有两种解决方案:
第一种就是修改ZipOutputStream,参考修改如下:(这个我没有测试过)
// ZipEntry e = createZipEntry(getUTF8String(b, 0, len));
ZipEntry e=null;
try
{
if (this.encoding.toUpperCase().equals("UTF-8"))
e=createZipEntry(getUTF8String(b, 0, len));
else
e=createZipEntry(new String(b,0,len,this.encoding));
}catch(Exception byteE) {
e=createZipEntry(getUTF8String(b, 0, len));
}
再加一个
public ZipInputStream(InputStream in,String encoding) {
super(new PushbackInputStream(in,512),new Inflater(true),512);
usesDefaultInflater = true;
if(in == null) {
throw new NullPointerException("in is null");
}
this.encoding=encoding;
}
第二种方法就是用ant包,可以在官方网站http://ant.apache.org/bindownload.cgi下载,把ant.jar导入到类中.
参考用例如下:
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 f1=new File(outputDirectory+File.separator);
f1.mkdir();
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){
}
}
分享到:
评论

相关推荐

    java zip解压中文乱码问题

    网上很多描述java解压中文乱码的问题,很多描述不全.由于工作需要整理出一个完整版.简单实用.下载后请从ZipUtil.java的main方法开始,一目了然. public static void main(String args[]) { new ZipUtil().unZip("E:\\...

    java压缩zip文件解决中文乱码问题

    总结来说,处理Java中ZIP文件的中文乱码问题,关键在于明确指定字符集,通常是UTF-8,无论是使用Java内置的API还是第三方库。同时,理解文件系统的编码和压缩/解压过程中的字符编码转换也非常重要。通过这种方式,...

    java zip压缩解压工具解决中文乱码问题

    在Java编程中,处理压缩和解压缩ZIP文件是一项常见的任务,尤其当文件中包含中文字符时,可能会遇到中文乱码的问题。这是因为Java的标准库在处理非ASCII编码时可能存在不足。本篇文章将详细介绍如何使用Java标准库...

    基于Java向zip压缩包追加文件

    在Java编程中,向现有的ZIP压缩包追加文件通常需要经过解压、修改、再压缩的步骤,因为标准的Java ZIP库(如`java.util.zip`包)并不直接支持追加到已存在的ZIP文件。本篇文章将深入探讨如何实现这个功能,主要关注...

    java zipentry.jar 解决解压失败问题

    这就可能导致在Java中解压包含非ASCII字符(如中文)的ZIP文件时出现问题。 Java的`java.util.zip`包提供了对ZIP文件的支持,包括`ZipInputStream`和`ZipOutputStream`类用于读写ZIP文件,以及`ZipEntry`类来代表...

    java android zip解压缩(解决压缩中文乱码问题)

    本篇文章将深入探讨如何在Android平台上解决Java ZIP库在解压缩中文文件时出现的乱码问题。 首先,我们要明白乱码问题的根源。在文件的压缩和解压缩过程中,文件名通常被编码为字节序列,这个序列取决于原始文件名...

    java 打zip包

    本资源提供了一种解决方案,解决了使用Java打zip包时可能会遇到的中文乱码和包含空文件的问题。以下是关于这个主题的一些关键知识点: 1. **Java的 ZIP API**:Java标准库提供了一个名为`java.util.zip`的包,它...

    java zip文件压缩与解压缩

    Apache Commons Compress库是Java中一个强大的工具,它提供了对多种压缩格式的支持,包括zip,而且能够处理中文文件名的问题,避免了因为字符编码不正确导致的乱码问题。 首先,我们要了解Java内置的`java.util.zip...

    JAVA解压ZIP多层目录文件(需ant.jar

    本文将详细介绍一个Java方法,该方法用于解压包含多层目录结构的ZIP文件,并能够支持中文文件名。这种方法利用了Apache Ant库中的`org.apache.tools.zip.ZipFile`类来实现解压功能。在实际应用中,这种方法非常实用...

    根据java.util.zip源码修改zip支持中文

    标题"根据java.util.zip源码修改zip支持中文"指的是开发者可能遇到了Java标准库在处理包含中文字符的ZIP文件时的问题,并尝试通过修改`java.util.zip`的源代码来解决这个问题。这通常涉及到对ZIP文件结构的理解以及...

    java解压zip 可包含中文文件

    `java.util.zip`库是Java标准库的一部分,提供了对ZIP文件的支持,但是默认可能不支持中文文件名的正确解压。本篇文章将详细讲解如何在Java中处理包含中文文件名的ZIP压缩包,并使用Apache Ant工具(ant.jar)来辅助...

    java 读取ZIP和RAR压缩包的目录结构

    java ZIP和RAR 压缩包 目录结构。 1.ant.jar 解决java自带zip不能读取中文压缩包的问题; 2.需要安装WINRAR软件,以便解压rar文件,然后获取对应目录; 3.实现在线预览压缩包目录结构的功能;

    java压缩(zip)中文问题完美解决

    在Java编程中,处理包含中文字符的文件进行压缩时,可能会遇到中文乱码的问题。这是因为Java标准库的`java.util.zip`包在处理非ASCII字符时可能存在不兼容性,尤其是在某些编码环境下。为了解决这个问题,我们可以...

    java朗读中文字符串.zip

    这个压缩包"java朗读中文字符串.zip"很可能包含了一个或多个示例程序,演示如何利用Java进行文本到语音(Text-to-Speech, TTS)转换,特别是针对中文字符串。在Java中,这种功能通常依赖于Java的Text-to-Speech API...

    javacv-1.5.5.jar中文文档.zip

    javacv-***.jar中文文档.zip,java,javacv-***.jar,org.bytedeco,javacv,***,cl.eye,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,bytedeco,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法:...

    用java打zip包

    以下将详细讲解如何使用Java结合Ant来创建ZIP文件,并解决中文乱码的问题。 首先,我们需要理解Java中用于创建ZIP文件的API。Java标准库中的`java.util.zip`包提供了`ZipOutputStream`类,可以用来创建ZIP文件。...

    java中文API.zip

    Java中文API.zip是一个非常有用的资源,它包含了Java开发过程中所需的中文版API文档,这对于初学者和有经验的开发者来说都是一个宝贵的参考资料。API(Application Programming Interface)是软件开发者用来与操作...

    javacv-1.5.7-API文档-中文版.zip

    包含翻译后的API文档:javacv-1.5.7-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.bytedeco:javacv:1.5.7; 标签:bytedeco、javacv、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开...

    JAVA解压ZIP文件(可解压中文)

    下面将详细介绍如何使用Java来解压ZIP文件,并解决中文文件名的解压问题。 首先,Java提供了一个内置的`java.util.zip`包,该包包含了处理ZIP文件所需的所有类,如`ZipInputStream`和`ZipEntry`。`ZipInputStream`...

Global site tag (gtag.js) - Google Analytics