一、Zip4j介绍
zip4j官网:http://www.lingala.net/zip4j/可以在"download"页面下载官方示例进行学习。
特征:
从Zip文件创建,添加,提取,更新,删除文件;
读/写受密码保护的Zip文件和流;
支持AES 128/256加密,支持标准邮编加密;
支持Zip64格式
支持存储(无压缩)和Deflate压缩方法
从Split Zip文件创建或提取文件(例如:z01,z02,... zip)
支持zip 中的Unicode文件名和注释* Progress Monitor- 集成到应用程序和面向用户的应用程序
进度监视器
二、需要的引入的jar包
<dependency>
<groupId>net.lingala.zip4j</groupId>
<artifactId>zip4j</artifactId>
<version>2.7.0</version>
</dependency>
三、压缩整个文件夹
import java.io.File;
import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.model.enums.CompressionLevel;
import net.lingala.zip4j.model.enums.CompressionMethod;
public class ZipFiles {
private void zipFile() throws ZipException {
// 生成的压缩文件
ZipFile zipFile = new ZipFile("D:\\test.zip");
ZipParameters parameters = new ZipParameters();
// 压缩方式
parameters.setCompressionMethod(CompressionMethod.STORE);
// 压缩级别
parameters.setCompressionLevel(CompressionLevel.FAST);
// 要打包的文件夹
File currentFile = new File("D:\\test");
File[] list = currentFile.listFiles();
// 遍历test文件夹下所有的文件、文件夹
for (File f : list) {
if (f.isDirectory()) {
zipFile.addFile(f.getPath(), parameters);
} else {
zipFile.addFile(f, parameters);
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ZipFiles zf = new ZipFiles();
try {
zf.zipFile();
} catch (ZipException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
四、
解压ZIP格式的文件
public static void unzip(String srcFile,String destDirPath) {
long startTime=System.nanoTime(); //获取开始时间
try {
/** 判断文件是否存在 */
File file = new File(srcFile);
if (file.exists()) {
/** 判断文件是否是zip格式的压缩文件 */
// 获取文件的后缀
String fileSuffix = file.getName().substring(file.getName().lastIndexOf("."));
if (".zip".equals(fileSuffix)) {
net.lingala.zip4j.core.ZipFile zipFile = new net.lingala.zip4j.core.ZipFile(srcFile);
// 设置编码格式中文设置为GBK格式
zipFile.setFileNameCharset("GBK");
// 解压压缩包
zipFile.extractAll(destDirPath);
}
}
} catch (Exception e) {
e.printStackTrace();
}
long endTime=System.nanoTime(); //获取结束时间
System.out.println("程序运行时间: "+(endTime-startTime)+"ns");
System.out.println("程序运行时间: "+(endTime-startTime)/1000000+"ms");
System.out.println("程序运行时间: "+(endTime-startTime)/1000000000+"s");
}