今天在项目里面看到了一个非常棒的工具包zip4j
它的功能非常强大: 对文件进行压缩和加密, 对文件进行解压和解密
使用jdk自带的zip工具包来实现是非常复杂的,需要自己对流来进行加密update操作. 现在使用zip4j来实现这个功能非常简洁.
下面给出简单的使用代码
package cn.majingjing.tm.test.zip4j;
import java.io.File;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;
/**
* 对文件进行压缩和加密, 对文件进行解压和解密
*
*/
public class CompressUtils {
/**
* 解压加密的压缩文件
*
* @param zipfile
* @param dest
* @param passwd
* @throws ZipException
*/
public void unZip(File zipfile, String dest, String passwd) throws ZipException {
ZipFile zfile = new ZipFile(zipfile);
// zfile.setFileNameCharset("GBK");//在GBK系统中需要设置
if (!zfile.isValidZipFile()) {
throw new ZipException("压缩文件不合法,可能已经损坏!");
}
File file = new File(dest);
if (file.isDirectory() && !file.exists()) {
file.mkdirs();
}
if (zfile.isEncrypted()) {
zfile.setPassword(passwd.toCharArray());
}
zfile.extractAll(dest);
}
/**
* 压缩文件且加密
*
* @param src
* @param dest
* @param is
* @param passwd
*/
public void zip(String src, String dest, String passwd) throws ZipException {
File srcfile = new File(src);
// 创建目标文件
ZipParameters par = new ZipParameters();
par.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
par.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
if (passwd != null) {
par.setEncryptFiles(true);
par.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);
par.setPassword(passwd.toCharArray());
}
ZipFile zipfile = new ZipFile(dest);
if (srcfile.isDirectory()) {
zipfile.addFolder(srcfile, par);
} else {
zipfile.addFile(srcfile, par);
}
}
public static void main(String[] args) throws Exception {
CompressUtils tool = new CompressUtils();
String src = "F:\\test\\zip4j\\a";
String dest = "F:\\test\\zip4j\\a.zip";
tool.zip(src, dest, "123456");
tool.unZip(new File(dest), src + "-2", "123456");
}
}
这个使用非常方便吧。需要依赖的jar包如下
<!-- https://mvnrepository.com/artifact/net.lingala.zip4j/zip4j -->
<dependency>
<groupId>net.lingala.zip4j</groupId>
<artifactId>zip4j</artifactId>
<version>1.3.2</version>
</dependency>
附件为zip4j的 源码,jar包,示例zip4j_1.3.2.zip