`
peng_jian_ming
  • 浏览: 259054 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Java解压ZIP文件同时解决压缩文件中含有中文名文件乱码的问题

    博客分类:
  • Java
阅读更多
在使用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文件解决中文乱码问题

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

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

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

    解压zip压缩文件,支持多文件目录解压,中文乱码问题

    在使用Java对ZIP压缩文件进行解压的方式中有两种,一种是使用apache提供的ant.jar工具包,但是如果ZIP文件中含有中文名称的文件,在解压后,文件名将出现乱码,另一种是使用Java自身JDK中java.util.zip包下工具类,...

    ZipUtil文件压缩工具类(解决中文乱码)

    此外,`ZipUtil`类可能还包含其他实用功能,比如解压缩ZIP文件,检查ZIP文件是否存在中文乱码,或者提供配置选项以自定义压缩级别、是否保留原文件的最后修改时间等。 总之,`ZipUtil`文件压缩工具类通过结合`Zip...

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

    总之,解决Java压缩ZIP文件中文乱码问题的关键在于使用支持设置编码的第三方库,并在处理中文内容和注释时明确指定正确的字符编码。这样,无论在何种编码环境中,都能确保中文字符正确无误地被压缩和解压。

    ZipOutputStream 压缩文件以及乱码问题解决方案

    在IT行业中,文件压缩是一种常见的数据存储和传输方式,ZipOutputStream是Java标准库中的一个类,用于将数据流写入ZIP格式的压缩文件。本文将深入探讨如何使用ZipOutputStream进行文件压缩,并解决可能出现的乱码...

    解压文件时中文乱码

    - **使用支持Unicode的压缩工具**:例如7-Zip,它在创建和解压ZIP文件时,默认使用UTF-8编码,能较好地处理中文字符。 - **编码转换**:在解压前,可以尝试使用专门的编码转换工具预处理压缩包,使其内部文件名...

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

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

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

    当我们尝试用这些类解压含有中文名的文件时,如果未正确处理字符编码,就会出现乱码或者解压失败。 为了解决这个问题,我们需要确保在读取ZIP文件时正确地设置字符编码。以下是一些关键步骤: 1. **设置正确的字符...

    JDK ZipEntry压缩中文文件名乱码解决

    项目中碰到问题.jdk zipEntry 压缩中文文件名乱码  上网查了下,有两种方法,一种修改jdk ZipInputStream及ZipOutputStream 的源文件,比较麻烦,不建议此项.  第二种 就是拿来主义,因为 开源项目 Ant 里已经有...

    ZipInputStream解压有中文名报错问题解决

    在Java编程中,`ZipInputStream`是用于读取和解压ZIP格式的压缩文件的核心类。然而,正如标题和描述中指出的,当ZIP文件包含带有中文文件名的条目时,使用`ZipInputStream`进行解压可能会遇到问题。这个问题通常表现...

    安卓文件下载上传解压相关-javaandroidzip解压缩解决压缩中文乱码问题).rar

    本文将深入探讨如何使用Java在Android环境中处理这些任务,特别是解决中文文件名在压缩和解压缩过程中可能出现的乱码问题。 首先,让我们关注文件的下载和上传。在Android中,我们可以使用`java.net.URL`和`java...

    压缩工具类改良版(解决中文乱码)

    总的来说,这个项目提供了一个优化的解决方案,解决了Java中使用`ZipEntry`压缩中文文件时可能出现的乱码问题。通过理解`ZipEntry`的工作原理,以及如何正确处理字符编码,开发者可以更好地理解和应用这个工具类,...

    java解压zip时中文名称解决方法

    本篇文章将详细探讨如何解决Java解压ZIP文件时遇到的中文名称问题。 首先,我们需要了解ZIP文件的编码标准。ZIP文件的标准编码是UTF-8,但并非所有创建ZIP文件的工具都遵循这个标准,有的可能使用GBK或其他编码。...

    java解压缩zip代码与用到的jar包

    在Java中,通常会创建一个静态方法,如`unzipFile(String zipFilePath, String destDir)`,用于解压ZIP文件到指定的目标目录。解压缩的基本步骤如下: 1. **打开ZIP文件**:使用`ZipInputStream`从ZIP文件路径创建...

    pako gzip 压缩和解压缩(支持中文)

    在本项目中,我们将关注如何使用pako库进行gzip压缩和解压缩,并解决在处理中英文内容时可能出现的乱码问题。 首先,让我们详细了解pako库。pako是基于zlib库的一个轻量级实现,它在浏览器和Node.js环境中都能运行...

    Java压缩文件目录成ZIP包最新技巧

    本文选择第二种方案进行介绍,即使用Apache Ant工具库中的Zip组件来实现对包含中文名的文件或目录的压缩。 #### 三、引入Apache Ant Zip组件 为了使用Apache Ant工具库中的Zip组件,首先需要将Ant的jar包添加到...

    支持中文的zip压缩解压

    在许多编程语言中,包括Java,处理中文字符可能会遇到编码问题,导致在压缩或解压缩过程中出现乱码。以下是对这一主题的详细解释。 首先,我们来了解一下ZIP文件格式。ZIP是一种广泛使用的文件格式,用于将多个文件...

    Java处理中文文件名-压缩中文名字的文件.rar

    在Java编程语言中,处理包含中文字符的文件名可能会遇到一些挑战,主要是因为编码问题。在不同的操作系统和文件系统中,对非ASCII字符(如中文字符)的支持方式不同,这可能导致乱码或无法正确读取文件。Java API...

    回调有进度条的解压Zip压缩包,解决压缩包内路径中文乱码问题

    只支持zip压缩包的解压,支持压缩包内中文路径、回调有进度条和正在解压的名字 ******************************** 重要说明:该压缩包内的是两个工具类,不是完整的demo。 实现方法:实现回调接口,调用解压方法即可

Global site tag (gtag.js) - Google Analytics