您的位置:首页 > 编程语言 > Java开发

zip4j -- Java处理zip压缩文件的完整解决方案

2015-03-31 06:20 441 查看
一个多月前,因项目需要对Java语言下的zip格式压缩文件的处理作了一些了解,尝试了多种开源项目并写了几篇博客做记录:

http://www.linuxidc.com/Linux/2014-11/109059.htm

http://www.linuxidc.com/Linux/2014-11/109057.htm

http://www.linuxidc.com/Linux/2014-11/109058.htm

ZIP4J,作为解决了我的问题的终极解决方案,本来一开始在搜索引擎上就看到了它的踪迹,但因天朝的网络环境问题,zip4j的官网一直无法访问,最终使我多走了好多冤枉路,期间试过JDK的zip包,试过Apache的zip解决方案,也试过如winzipaes等其它的开源框架,最终没有满足自己的需求,最后,我不得已挂了一下代理将zip4j下载了下来,试用了一下,果然威力无比,所到之处所向披靡...

闲话少说,如果需要可以到zip4j的官网下载该开源项目:http://www.lingala.net/zip4j/

不过需要提醒的是可能无法直接访问,如果无法正常访问,请自行准备代理访问,如果各位嫌麻烦,可以到这里下载:

------------------------------------------分割线------------------------------------------

免费下载地址在 http://linux.linuxidc.com/

用户名与密码都是www.linuxidc.com

具体下载目录在 /2014年资料/11月/6日/zip4j -- Java处理zip压缩文件的完整解决方案

下载方法见 http://www.linuxidc.com/Linux/2013-07/87684.htm

------------------------------------------分割线------------------------------------------

这是我的CSDN资源链接,下载需要3分,您如果分数不多,可以留言索取,呵呵...我也需要积分,请谅解!

官网上下载的资源好像是不带API帮助文档的,我利用其源码生成了一份,也一并打在我的资源文件中,希望能帮到大家。

ZIP4J的官方说明

(自己翻译了一下,英文不好,呵呵...)

Key features(主要特性):

Create, Add, Extract, Update, Remove files from a Zip file

针对ZIP压缩文件创建、添加、抽出、更新和移除文件

Read/Write password protected Zip files

(读写有密码保护的Zip文件)

Supports AES 128/256 Encryption

(支持AES 128/256算法加密)

Supports Standard Zip Encryption

(支持标准Zip算法加密)

Supports Zip64 format

(支持zip64格式)

Supports Store (No Compression) and Deflate compression method

(支持Store(非压缩)和Deflate压缩方法---不太明白)

Create or extract files from Split Zip files (Ex: z01, z02,...zip)

(针对分块zip文件创建和抽出文件)

Supports Unicode file names

(支持Unicode编码文件名)

Progress Monitor

(进度监控)

从上面的主要特性可以看出,zip4j的功能是非常强大的,完全可以利用其写个类似于好压的zip文件管理软件,但我们用地最多的可能还是利用其作一些简单的解压和压缩操作,其它的功能极少触碰,我也一样,呵呵...

使用注意点

zip4j默认采用UTF-8编码,所以它支持中文,同时也支持密码,而且支持多种压缩算法,可以说功能强大,但使用起来却非常简单,当然,如果需求比较复杂,那就得好好去研究了。如果你仅仅是简单地解压一个zip压缩文件,那么只需要简单地几步即可:

public static void unzip(File zipFile, String dest, String passwd) throws ZipException {

ZipFile zFile = new ZipFile(zipFile); // 首先创建ZipFile指向磁盘上的.zip文件

zFile.setFileNameCharset("GBK"); // 设置文件名编码,在GBK系统中需要设置

if (!zFile.isValidZipFile()) { // 验证.zip文件是否合法,包括文件是否存在、是否为zip文件、是否被损坏等

throw new ZipException("压缩文件不合法,可能被损坏.");

}

File destDir = new File(dest); // 解压目录

if (destDir.isDirectory() && !destDir.exists()) {

destDir.mkdir();

}

if (zFile.isEncrypted()) {

zFile.setPassword(passwd.toCharArray()); // 设置密码

}

zFile.extractAll(dest); // 将文件抽出到解压目录(解压)

}

当然将指定文件压缩成zip文件也是非常简单的事,此处不再贴代码,如有需要请参看下面的完整示例。

提示:如果将要解压的压缩文件中的文件名含有中文,解压时需要注意一点,就是设置文件名字符集方法

zFile.setFileNameCharset("GBK");

这个方法的调用一定要靠前,要靠多前呢?其实最好在创建ZipFile之后就设置上,至少要在

zFile.isValidZipFile()

这个方法调用之前调用,我在应用时因为这个问题耽误好久,最后查看源码才弄明白,好像是ZipFile在验证方法中就将编码设置好,以后就不再对文件名编码作改变了。

更多详情见请继续阅读下一页的精彩内容http://www.linuxidc.com/Linux/2014-11/109061p2.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: