在使用Java对ZIP压缩文件进行解压的方式中有两种,一种是使用apache提供的ant.jar工具包,但是如果ZIP文件中含有中文名称的文件,在解压后,文件名将出现乱码,另一种是使用Java自身JDK中java.util.zip包下工具类,但是同样如果有中文名的情况下依然会出现乱码情况。因此对于这种乱码的处理,一种是修改JDK下的几个源文件,一种就是把需要用的JDK源文件重新反编译进行处理,单独放在一个包中,在使用的时候,调用自己处理过的包中文件进行处理即可。附件tools.rar压缩文件是我进行处理过后的需要调用到的java源程序,主要为Deflater.java,DeflaterOutputStream.java,InflaterInputStream.java,ZipConstants.java,ZipEntry.java,ZipInputStram.java,ZipOutputStream.java文件,同时包含一个解压缩文件CompressZipFile.java代码如下。
package com.originsys.eap.tools;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class CompresszZipFile {
static final int BUFFER = 2048;
/**
* 读取ZIP文件,只适合于ZIP文件对于RAR文件无效,因为ZIP文件的压缩算法是公开的,而RAR不是
* @author 彭建明
* @version 1.0
* @param zipfilepath:ZIP文件的路径,unzippath:要解压到的文件路径
*/
public void ReadZip(String zipfilepath,String unzippath){
try {
BufferedOutputStream bos = null;
//创建输入字节流
FileInputStream fis = new FileInputStream(zipfilepath);
//根据输入字节流创建输入字符流
BufferedInputStream bis = new BufferedInputStream(fis);
//根据字符流,创建ZIP文件输入流
ZipInputStream zis = new ZipInputStream(bis);
//zip文件条目,表示zip文件
ZipEntry entry;
//循环读取文件条目,只要不为空,就进行处理
while((entry=zis.getNextEntry())!=null){
int count ;
byte date[] = new byte[BUFFER];
//如果条目是文件目录,则继续执行
if(entry.isDirectory()){
continue;
}else{
int begin = zipfilepath.lastIndexOf("\\")+1;
int end = zipfilepath.lastIndexOf(".")+1;
String zipRealName = zipfilepath.substring(begin,end);
bos = new BufferedOutputStream(new FileOutputStream(this.getRealFileName(unzippath+"\\"+zipRealName,entry.getName())));
while((count=zis.read(date))!=-1){
bos.write(date,0,count);
}
bos.flush();bos.close();
}
}
zis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private File getRealFileName(String zippath,String absFileName){
String[] dirs = absFileName.split("/",absFileName.length());
//创建文件对象
File file = new File(zippath);
if(dirs.length>1){
for(int i=0;i<dirs.length-1;i++){
//根据file抽象路径和dir路径字符串创建一个新的file对象,路径为文件的上一个目录
file = new File(file,dirs[i]);
}
}
if(!file.exists()){
file.mkdirs();
}
file = new File(file,dirs[dirs.length-1]);
return file;
}
}
分享到:
相关推荐
总结来说,处理Java中ZIP文件的中文乱码问题,关键在于明确指定字符集,通常是UTF-8,无论是使用Java内置的API还是第三方库。同时,理解文件系统的编码和压缩/解压过程中的字符编码转换也非常重要。通过这种方式,...
本篇文章将深入探讨如何在Android平台上解决Java ZIP库在解压缩中文文件时出现的乱码问题。 首先,我们要明白乱码问题的根源。在文件的压缩和解压缩过程中,文件名通常被编码为字节序列,这个序列取决于原始文件名...
在使用Java对ZIP压缩文件进行解压的方式中有两种,一种是使用apache提供的ant.jar工具包,但是如果ZIP文件中含有中文名称的文件,在解压后,文件名将出现乱码,另一种是使用Java自身JDK中java.util.zip包下工具类,...
此外,`ZipUtil`类可能还包含其他实用功能,比如解压缩ZIP文件,检查ZIP文件是否存在中文乱码,或者提供配置选项以自定义压缩级别、是否保留原文件的最后修改时间等。 总之,`ZipUtil`文件压缩工具类通过结合`Zip...
总之,解决Java压缩ZIP文件中文乱码问题的关键在于使用支持设置编码的第三方库,并在处理中文内容和注释时明确指定正确的字符编码。这样,无论在何种编码环境中,都能确保中文字符正确无误地被压缩和解压。
在IT行业中,文件压缩是一种常见的数据存储和传输方式,ZipOutputStream是Java标准库中的一个类,用于将数据流写入ZIP格式的压缩文件。本文将深入探讨如何使用ZipOutputStream进行文件压缩,并解决可能出现的乱码...
- **使用支持Unicode的压缩工具**:例如7-Zip,它在创建和解压ZIP文件时,默认使用UTF-8编码,能较好地处理中文字符。 - **编码转换**:在解压前,可以尝试使用专门的编码转换工具预处理压缩包,使其内部文件名...
在Java编程中,向现有的ZIP压缩包追加文件通常需要经过解压、修改、再压缩的步骤,因为标准的Java ZIP库(如`java.util.zip`包)并不直接支持追加到已存在的ZIP文件。本篇文章将深入探讨如何实现这个功能,主要关注...
当我们尝试用这些类解压含有中文名的文件时,如果未正确处理字符编码,就会出现乱码或者解压失败。 为了解决这个问题,我们需要确保在读取ZIP文件时正确地设置字符编码。以下是一些关键步骤: 1. **设置正确的字符...
项目中碰到问题.jdk zipEntry 压缩中文文件名乱码 上网查了下,有两种方法,一种修改jdk ZipInputStream及ZipOutputStream 的源文件,比较麻烦,不建议此项. 第二种 就是拿来主义,因为 开源项目 Ant 里已经有...
在Java编程中,`ZipInputStream`是用于读取和解压ZIP格式的压缩文件的核心类。然而,正如标题和描述中指出的,当ZIP文件包含带有中文文件名的条目时,使用`ZipInputStream`进行解压可能会遇到问题。这个问题通常表现...
本文将深入探讨如何使用Java在Android环境中处理这些任务,特别是解决中文文件名在压缩和解压缩过程中可能出现的乱码问题。 首先,让我们关注文件的下载和上传。在Android中,我们可以使用`java.net.URL`和`java...
总的来说,这个项目提供了一个优化的解决方案,解决了Java中使用`ZipEntry`压缩中文文件时可能出现的乱码问题。通过理解`ZipEntry`的工作原理,以及如何正确处理字符编码,开发者可以更好地理解和应用这个工具类,...
本篇文章将详细探讨如何解决Java解压ZIP文件时遇到的中文名称问题。 首先,我们需要了解ZIP文件的编码标准。ZIP文件的标准编码是UTF-8,但并非所有创建ZIP文件的工具都遵循这个标准,有的可能使用GBK或其他编码。...
在Java中,通常会创建一个静态方法,如`unzipFile(String zipFilePath, String destDir)`,用于解压ZIP文件到指定的目标目录。解压缩的基本步骤如下: 1. **打开ZIP文件**:使用`ZipInputStream`从ZIP文件路径创建...
在本项目中,我们将关注如何使用pako库进行gzip压缩和解压缩,并解决在处理中英文内容时可能出现的乱码问题。 首先,让我们详细了解pako库。pako是基于zlib库的一个轻量级实现,它在浏览器和Node.js环境中都能运行...
本文选择第二种方案进行介绍,即使用Apache Ant工具库中的Zip组件来实现对包含中文名的文件或目录的压缩。 #### 三、引入Apache Ant Zip组件 为了使用Apache Ant工具库中的Zip组件,首先需要将Ant的jar包添加到...
在许多编程语言中,包括Java,处理中文字符可能会遇到编码问题,导致在压缩或解压缩过程中出现乱码。以下是对这一主题的详细解释。 首先,我们来了解一下ZIP文件格式。ZIP是一种广泛使用的文件格式,用于将多个文件...
在Java编程语言中,处理包含中文字符的文件名可能会遇到一些挑战,主要是因为编码问题。在不同的操作系统和文件系统中,对非ASCII字符(如中文字符)的支持方式不同,这可能导致乱码或无法正确读取文件。Java API...
只支持zip压缩包的解压,支持压缩包内中文路径、回调有进度条和正在解压的名字 ******************************** 重要说明:该压缩包内的是两个工具类,不是完整的demo。 实现方法:实现回调接口,调用解压方法即可