`
songhaikang
  • 浏览: 33257 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

用java解压zip或jar文件解决中文乱码,支持编码设置

阅读更多
使用JDK自带的解压zip或jar工具时,如果文件名称有汉字,解压文件时就会出错
该案例重写了JDK的几个核心类,解决了此问题,使用该案例之前请首先现在我们
重写过的几个类文件。
下载地址:http://www.blackswansoft.com/songhaikang/files/myfile/myzip.rar

import file.zip.myzip.MyZipEntry;
import file.zip.myzip.MyZipInputStream;



/**
* 解压zip或jar文件
* 支持编码设置
* @author shk
*
*/
public class UnZip {
public static void main(String args[]) {
new UnZip().unZip("c:\temps\zip压缩.zip","C:\temps\zip压缩2","GB2312");
}

/**
* 解压zip或jar文件
* @param sourcePath 源文件
* @param savePath   解压后存放位置
* @param encoding   文件编码
*/
public void unZip(String sourcePath, String savePath,String encoding){
File sourceFile = new File(sourcePath);
try {
ZipFile zipFile = new ZipFile(sourceFile);
System.out.println("该压缩文件内的条目数为:"+zipFile.size());
} catch (ZipException e1) {
System.out.println("该文件不是一个zip文件");
} catch (IOException e1) {
System.out.println("读取文件时出错");
}

File saveFilePath = new File(savePath);
sourcePath = sourceFile.getAbsolutePath();
System.out.println("将" + sourcePath + "  解压到" + saveFilePath.getAbsolutePath());
if (!sourceFile.isFile()){
System.out.println(sourcePath + "文件不存在");
}else {
String zipFileName = sourceFile.getName();
System.out.println(zipFileName + "开始解压");
if (!saveFilePath.isDirectory()){
saveFilePath.mkdirs(); // 创建放置解压后文件的目录
}
try {
MyZipInputStream in = new MyZipInputStream(new FileInputStream(sourceFile),encoding);//读取源文件
FileOutputStream out;
byte buf[] = new byte[1024]; // 解压缓冲区
MyZipEntry zipEntry; // 获取压缩文件中的文件或目录
String zipEntryName;
File file, parent;
int len;
while ((zipEntry = in.getNextEntry()) != null) {
zipEntryName = zipEntry.getName();
System.out.println(zipFileName + "/" + zipEntryName + "   被解压");
if (zipEntry.isDirectory()){ // 如果读出的是目录
new File(saveFilePath, zipEntryName).mkdirs();//创建目录
}else {
file = new File(saveFilePath, zipEntryName);//创建文件
// 如果读出的这个文件所在目录尚未创建
parent = file.getParentFile();
if (!parent.exists()){
parent.mkdirs();
}
// 如果该文件已存在,直接覆盖
// 如果该文件不存在,自动创建
out = new FileOutputStream(file);
while ((len = in.read(buf, 0, 1024)) != -1){
out.write(buf, 0, len);
}
out.close();
}
}
in.close();
System.out.println(zipFileName + "  解压完毕");
} catch (Exception e) {
e.printStackTrace();
System.out.println(zipFileName + "  解压失败");
}
}
}
}


推荐软件

用java开发的一款功能强大的开源的远程控制软件,最近又升级了,添加了许多使用的功能,而且代码也有了很大程度的优化。可以实现生成服务器、修改上线主机名称、屏幕监视,屏幕控制、主动连接、上传文件、下载文件、 远程命令、远程任务管理器、发送警告、相互聊天、换皮肤、版本升级提醒等功能,通过该软件可以实现用一台电脑同时控制多台电脑,也可以多台电脑控制同一台电脑等。
软件官方网站下载地址:http://dl.iteye.com/topics/download/c1b7acd2-c7ad-3753-8929-48424025d711

软件如下图所示:




1
0
分享到:
评论

相关推荐

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

    在Java编程中,处理文件压缩和解压是常见的任务,特别是使用ZIP格式。然而,当涉及到包含中文字符的文件或目录时,可能会遇到乱码问题。这个问题主要源于字符编码的不一致,通常需要正确设置字符集来确保中文字符在...

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

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

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

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

    java解压zip或rar压缩文件源码与jar包

    1. **Java解压ZIP文件**: - Java标准库提供了`java.util.zip`包,其中包含了解压缩ZIP文件所需的所有类。主要使用`ZipInputStream`和`ZipEntry`两个类。 - `ZipInputStream`是一个字节流,可以从输入流中读取ZIP...

    解压文件时中文乱码

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

    解压jar,zip,压缩支持中文zip

    在编程环境中解压包含中文文件名的`zip`或`jar`文件时,也需要特别注意编码设置。在Java中,可以使用`java.util.zip`包的`ZipInputStream`和`ZipEntry`类,同时设置正确的字符编码,如下所示: ```java import java...

    Zip解压-可设置压缩文件编码方式

    jdk自带的ZipEntry类解压zip文件,中文文件会出现乱码,jar包是根据Apache的解压缩包进行改造的,也适合于Android使用

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

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

    apache-ant-zip.jar

    总的来说,"apache-ant-zip.jar"和"ZipUtil.java"为开发者提供了解决中文乱码问题的工具和方法,使得在使用Apache Ant进行构建过程中,可以正确地处理包含中文文件名的ZIP文件,从而提高项目的可移植性和用户体验。...

    获取zip文件编码格式 cpdetector.zip

    1. 解压`cpdetector.zip`,得到包含的三个JAR文件。 2. 使用Java运行时环境(JRE)来运行包含这些库的程序,指定ZIP文件作为输入。 3. 工具会遍历ZIP文件中的每个文本文件,使用ANTLR解析ZIP结构,然后调用...

    java解压和压缩tar包

    本文将详细讲解如何使用Java来解压和压缩tar包,同时解决在处理中文文件名时可能出现的乱码问题,主要关注`javatar-2.5.jar`库中的功能以及`TarUtil.java`类的应用。 首先,`javatar-2.5.jar`是一个专门用于处理tar...

    利用ant.jar解压缩zip包

    总的来说,利用Apache Ant的ant.jar库,无论是通过Java代码还是Ant构建文件,都能方便、高效地解压缩ZIP文件,而且对于包含中文文件名的情况,它提供了良好的支持。在实际开发中,理解并熟练运用这类工具可以极大地...

    ZipEntry.jar 支持中文路径解压.zip

    在Android系统中,由于编码问题,直接使用标准的Java `java.util.zip` 包可能无法正确处理包含非ASCII字符(如中文)的路径。 `ZipEntry.jar` 的主要目的是解决这个兼容性问题,确保在解压缩过程中中文路径的正确...

    Linux系统unzip解压后中文名乱码解决方法.docx

    解决 Linux 系统 unzip 解压后中文名乱码的问题可以使用四种方法:使用 Python 脚本、使用 unzip 命令指定字符集、在环境变量中指定 unzip 参数、使用 Java 的 jar 命令解压 zip 文件。每种方法都可以解决中文名乱码...

    java 打zip包

    为了处理中文,应使用`new String(file.getName().getBytes("GBK"), "ISO-8859-1")`或者`new String(file.getName().getBytes("UTF-8"), "ISO-8859-1")`来转换文件名,这样在ZIP文件中保存的是正确的编码,而不会...

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

    在Java编程中,处理压缩和解压缩文件是常见的任务,特别是在构建自动化...在处理中文文件名时,确保正确设置字符编码,防止出现乱码问题。同时,注意压缩率的优化,例如选择合适的压缩级别,平衡压缩速度和文件大小。

    apache压缩解压zip,支持中文

    - `jyzip.java` 和 `yszip.java`:这两个可能是Java源代码文件,实现了自定义的ZIP操作,可能是为了演示或补充Apache Commons Compress的功能。 总的来说,Apache Commons Compress库是Java开发中处理ZIP压缩格式的...

    AesZipFileEncrypter打包文件加密,支持中文

    这个文件包含了使用AES加密的各个子文件,这些文件名都已正确地用UTF-8编码处理,即使在不同的操作系统或不支持UTF-8的环境中,也能正确显示和解压。 在实际应用中,`AesZipFileEncrypter` 可能会提供命令行工具或...

    Java带密码解压缩RAR压缩包(内附代码)

    如果遇到中文文件名显示乱码的问题,你可能需要尝试调整字符编码设置或者使用其他支持Unicode的压缩库。 总的来说,处理带密码的RAR文件在Java中可以通过第三方库实现,这些库通常会提供API来设置密码和处理解压缩...

    ftpserver-core-1.1.1.jar-GBK字符集.zip_______IE访问Apache Ftp Server 中文目录、中文文件名,乱码解决

    压缩包内的文件"GBK字符集ftpserver-core-1.1.1.jar-GBK字符集"和"apache-ftpserver-1.1.1(1).zip"可能是用来替换或升级Apache Ftp Server的组件,以便支持GBK字符集。用户可能需要解压这些文件,替换现有服务器安装...

Global site tag (gtag.js) - Google Analytics