使用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
软件如下图所示:
分享到:
相关推荐
在Java编程中,处理文件压缩和解压是常见的任务,特别是使用ZIP格式。然而,当涉及到包含中文字符的文件或目录时,可能会遇到乱码问题。这个问题主要源于字符编码的不一致,通常需要正确设置字符集来确保中文字符在...
当我们尝试用这些类解压含有中文名的文件时,如果未正确处理字符编码,就会出现乱码或者解压失败。 为了解决这个问题,我们需要确保在读取ZIP文件时正确地设置字符编码。以下是一些关键步骤: 1. **设置正确的字符...
本篇文章将深入探讨如何在Android平台上解决Java ZIP库在解压缩中文文件时出现的乱码问题。 首先,我们要明白乱码问题的根源。在文件的压缩和解压缩过程中,文件名通常被编码为字节序列,这个序列取决于原始文件名...
1. **Java解压ZIP文件**: - Java标准库提供了`java.util.zip`包,其中包含了解压缩ZIP文件所需的所有类。主要使用`ZipInputStream`和`ZipEntry`两个类。 - `ZipInputStream`是一个字节流,可以从输入流中读取ZIP...
- **使用支持Unicode的压缩工具**:例如7-Zip,它在创建和解压ZIP文件时,默认使用UTF-8编码,能较好地处理中文字符。 - **编码转换**:在解压前,可以尝试使用专门的编码转换工具预处理压缩包,使其内部文件名...
在编程环境中解压包含中文文件名的`zip`或`jar`文件时,也需要特别注意编码设置。在Java中,可以使用`java.util.zip`包的`ZipInputStream`和`ZipEntry`类,同时设置正确的字符编码,如下所示: ```java import java...
jdk自带的ZipEntry类解压zip文件,中文文件会出现乱码,jar包是根据Apache的解压缩包进行改造的,也适合于Android使用
项目中碰到问题.jdk zipEntry 压缩中文文件名乱码 上网查了下,有两种方法,一种修改jdk ZipInputStream及ZipOutputStream 的源文件,比较麻烦,不建议此项. 第二种 就是拿来主义,因为 开源项目 Ant 里已经有...
总的来说,"apache-ant-zip.jar"和"ZipUtil.java"为开发者提供了解决中文乱码问题的工具和方法,使得在使用Apache Ant进行构建过程中,可以正确地处理包含中文文件名的ZIP文件,从而提高项目的可移植性和用户体验。...
1. 解压`cpdetector.zip`,得到包含的三个JAR文件。 2. 使用Java运行时环境(JRE)来运行包含这些库的程序,指定ZIP文件作为输入。 3. 工具会遍历ZIP文件中的每个文本文件,使用ANTLR解析ZIP结构,然后调用...
本文将详细讲解如何使用Java来解压和压缩tar包,同时解决在处理中文文件名时可能出现的乱码问题,主要关注`javatar-2.5.jar`库中的功能以及`TarUtil.java`类的应用。 首先,`javatar-2.5.jar`是一个专门用于处理tar...
总的来说,利用Apache Ant的ant.jar库,无论是通过Java代码还是Ant构建文件,都能方便、高效地解压缩ZIP文件,而且对于包含中文文件名的情况,它提供了良好的支持。在实际开发中,理解并熟练运用这类工具可以极大地...
在Android系统中,由于编码问题,直接使用标准的Java `java.util.zip` 包可能无法正确处理包含非ASCII字符(如中文)的路径。 `ZipEntry.jar` 的主要目的是解决这个兼容性问题,确保在解压缩过程中中文路径的正确...
解决 Linux 系统 unzip 解压后中文名乱码的问题可以使用四种方法:使用 Python 脚本、使用 unzip 命令指定字符集、在环境变量中指定 unzip 参数、使用 Java 的 jar 命令解压 zip 文件。每种方法都可以解决中文名乱码...
为了处理中文,应使用`new String(file.getName().getBytes("GBK"), "ISO-8859-1")`或者`new String(file.getName().getBytes("UTF-8"), "ISO-8859-1")`来转换文件名,这样在ZIP文件中保存的是正确的编码,而不会...
在Java编程中,处理压缩和解压缩文件是常见的任务,特别是在构建自动化...在处理中文文件名时,确保正确设置字符编码,防止出现乱码问题。同时,注意压缩率的优化,例如选择合适的压缩级别,平衡压缩速度和文件大小。
- `jyzip.java` 和 `yszip.java`:这两个可能是Java源代码文件,实现了自定义的ZIP操作,可能是为了演示或补充Apache Commons Compress的功能。 总的来说,Apache Commons Compress库是Java开发中处理ZIP压缩格式的...
这个文件包含了使用AES加密的各个子文件,这些文件名都已正确地用UTF-8编码处理,即使在不同的操作系统或不支持UTF-8的环境中,也能正确显示和解压。 在实际应用中,`AesZipFileEncrypter` 可能会提供命令行工具或...
如果遇到中文文件名显示乱码的问题,你可能需要尝试调整字符编码设置或者使用其他支持Unicode的压缩库。 总的来说,处理带密码的RAR文件在Java中可以通过第三方库实现,这些库通常会提供API来设置密码和处理解压缩...
压缩包内的文件"GBK字符集ftpserver-core-1.1.1.jar-GBK字符集"和"apache-ftpserver-1.1.1(1).zip"可能是用来替换或升级Apache Ftp Server的组件,以便支持GBK字符集。用户可能需要解压这些文件,替换现有服务器安装...