1. 下载 net.lingala.zip4j jar包
<!--zip压缩工具包-->
<dependency>
<groupId>net.lingala.zip4j</groupId>
<artifactId>zip4j</artifactId>
<version>2.11.1</version>
</dependency>
2.具体使用代码
/**
* 压缩文件
* @param targetFile
* @throws ZipException
*/
public static void zipAll(File targetFile, String sourceDirectory) throws ZipException {
// 生成的压缩文件
ZipFile zipFile = new ZipFile(targetFile);
ZipParameters parameters = new ZipParameters();
// 压缩方式
parameters.setCompressionMethod(CompressionMethod.DEFLATE);
// 压缩级别
parameters.setCompressionLevel(CompressionLevel.NORMAL);
// 要打包的文件夹
File currentFile = new File(sourceDirectory);
File[] fs = currentFile.listFiles();
// 遍历test文件夹下所有的文件、文件夹
for (File f : fs) {
if (f.isDirectory()) {
zipFile.addFolder(f, parameters);
} else {
zipFile.addFile(f, parameters);
}
}
}
/**
* 解压文件
* @param sourceFile
* @param targetDirectory
*/
public static void unzipAll(File sourceFile, String targetDirectory) throws ZipException{
// 如果targetDirectory为空 说明是子文件夹 直接使用传进来的 sourceFile
if (StringUtils.isBlank(targetDirectory)){
targetDirectory = sourceFile.getAbsolutePath();
}
ZipFile zipFile = new ZipFile(sourceFile);
if (isZipFile(targetDirectory)){
targetDirectory = targetDirectory.substring(0, targetDirectory.length() - 4);
}
File parentFile = new File(targetDirectory);
if (parentFile.exists()){
FileUtils.deleteAllFiles(parentFile);
parentFile.mkdirs();
}
zipFile.setCharset(Charset.forName("GBK"));
// 解压
zipFile.extractAll(targetDirectory);
CloseStream.closed(zipFile);
// 遍历
List<File> fileList = new ArrayList<>();
// 获取父目录下所有文件
fileList = parentFile.isDirectory()? Arrays.asList(parentFile.listFiles()):fileList;
for (File fileItem : fileList){
if (fileItem.isFile()&& (isZipFile(fileItem.getAbsolutePath()))){
unzipAll(fileItem,null);
}
}
}
/**
* 判断文件路径是否包含zip
* @param filePath
* @return
*/
public static boolean isZipFile(String filePath){
return filePath.endsWith(ZIP.toLowerCase()) || filePath.endsWith(ZIP.toUpperCase());
}
!!!解压之后记得关闭zipFile对象!!!