使用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实现无乱码 内置类与jar包
使用java压缩也解压zip文件方法,解决中文乱码问题。使用java自带的压缩解压算法,会出现中文乱码问题。使用apache io的zip包,有效解决该问题。Ant的压缩解压,也是使用该类。
网上很多描述java解压中文乱码的问题,很多描述不全.由于工作需要整理出一个完整版.简单实用.下载后请从ZipUtil.java的main方法开始,一目了然. public static void main(String args[]) { new ZipUtil().unZip("E:\\...
完美支持解压zip文件多层文件解压,文件夹,文件,支持中文。
在使用Java对ZIP压缩文件进行解压的方式中有两种,一种是使用apache提供的ant.jar工具包,但是如果ZIP文件中含有中文名称的文件,在解压后,文件名将出现乱码,另一种是使用Java自身JDK中java.util.zip包下工具类,...
解决java压缩zip文件时的中文乱码问题 实现:java压缩文件成zip实现无乱码。 包括:写好的工具类与jar包。 使用方法:导入ant.jar包,调用CompressExcelOperate中的方法,即可实现压缩文件,并保证没有中文乱码...
解决java zip压缩文件里面带有中文文件,在java代码解压时报错,或者无法解压问题
java解压.zip或.jar文件.pdf
java解压zip, 可包含中文文件,附加ant.jar,绝对好用!!!
解决android 自带zip解压缩中文乱码的问题,导入zip.jar即可使用(与系统提供的用法相同),大小仅24k
java解压zip或rar压缩文件 包括源码和所需要的jar包:apache ant.jar 和 ...zip文件解压(要使用apache ant.jar以处理中文乱码) rar文件解压(要使用java-unrar-0.3.jar) 具有处理中文乱码功能 代码都有备注,很好懂!
java解压zip或rar压缩文件源码和jar包
java上传文件 实时获取上传进度 上传RAR,ZIP 并指定解压路劲 上传之后会按照路劲进行解压
解压过程中会出现乱码,当然压缩也是一样,使用这里面的zip 可以解决了,只是将原码改动了下。做人要老实,我这是转载被人的!
java 操作Zip文件(压缩、解压、加密) zip4j-1.3.2.jar ant-1.10.6.jar
CompresszZipFile 中带是 zip解压 ZipFileUtil 是文件的压缩 和rar的解压
zip压缩以及解压工具类,本人纯手打。其中包括zip所需要的jar 文件,copy到项目中可直接运行,以及工具类添加注释
应用SharpCompress0.22开源包进行文件的解压缩(zip,rar文件),已处理中文乱码问题,例子很基础.源码环境 VS2017 15.3 .
项目中碰到问题.jdk zipEntry 压缩中文文件名乱码 上网查了下,有两种方法,一种修改jdk ZipInputStream及ZipOutputStream 的源文件,比较麻烦,不建议此项. 第二种 就是拿来主义,因为 开源项目 Ant 里已经有...