1.添加依賴
<!-- zip壓縮文件工具類 --> <dependency> <groupId>net.lingala.zip4j</groupId> <artifactId>zip4j</artifactId> <version>1.3.2</version> </dependency>
2.工具類
package com.danyu.common.utils.file; import com.danyu.common.utils.StringUtils; import net.lingala.zip4j.core.ZipFile; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.util.Zip4jConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.util.ArrayList; import java.util.List; /** * danyu * 壓縮文件工具類 */ public class ZipUtil { private static final Logger log = LoggerFactory.getLogger(ZipUtil.class); /** * * 壓縮指定路徑的文件 * @param srcFilePath 待壓縮文件路徑 * @param zipPathFileName zip文件全路徑名 * @param password 加密密碼 * @return */ public static boolean zipFile(String srcFilePath, String zipPathFileName, String password){ try { // 生成的壓縮文件 ZipFile zipFile = new ZipFile(zipPathFileName); ZipParameters parameters = new ZipParameters(); // 壓縮級別 parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); if(!StringUtils.isEmpty(password)){ parameters.setEncryptFiles(true); parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES); parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256); parameters.setPassword(password); } // 要打包的文件夾 File currentFile = new File(srcFilePath); File[] fs = currentFile.listFiles(); // 遍歷test文件夾下所有的文件、文件夾 for (File f : fs) { if (f.isDirectory()) { zipFile.addFolder(f.getPath(), parameters); } else { zipFile.addFile(f, parameters); } } return true; } catch (ZipException e) { e.printStackTrace(); log.error("壓縮文件【"+srcFilePath+"】到路徑【"+zipPathFileName+"】失敗:\n"+e.getMessage()); return false; } } /** * @param zipFileFullName zip文件所在的路徑名 * @param filePath 解壓到的路徑 * @param password 需要解壓的密碼 * @return */ public static boolean unZipFile(String zipFileFullName, String filePath, String password) { try { ZipFile zipFile = new ZipFile(zipFileFullName); // 如果解壓需要密碼 if(StringUtils.isNotEmpty(password)&&zipFile.isEncrypted()) { zipFile.setPassword(password); } zipFile.extractAll(filePath); return true; } catch (ZipException e) { e.printStackTrace(); log.error("解壓文件【"+zipFileFullName+"】到路徑【"+filePath+"】失敗:\n"+e.getMessage()); return false; } } /** * 添加文件到壓縮文件中 * @param zipFullFileName zip文件所在路徑及全名 * @param fullFileNameList 待添加的文件全路徑集合 * @param rootFolderInZip 在壓縮文件里的文件夾名 * @return */ public static boolean addFilesToZip(String zipFullFileName, List<String> fullFileNameList, String rootFolderInZip) { try { ZipFile zipFile = new ZipFile(zipFullFileName); ArrayList<File> addFiles = new ArrayList<>(); for (String fileName:fullFileNameList) { addFiles.add(new File(fileName)); } ZipParameters parameters = new ZipParameters(); parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); if(StringUtils.isNotEmpty(rootFolderInZip)){ if(rootFolderInZip.endsWith("/")==false){ rootFolderInZip = rootFolderInZip+"/"; } parameters.setRootFolderInZip(rootFolderInZip); } zipFile.addFiles(addFiles, parameters); return true; } catch (ZipException e) { e.printStackTrace(); log.error("添加文件失敗:\n"+e.getMessage()); return false; } } /** * 從壓縮文件中刪除路徑 * @param zipFullFileName * @param fileName * @return */ public static boolean deleteFileInZip(String zipFullFileName, String fileName) { try { ZipFile zipFile = new ZipFile(zipFullFileName); zipFile.removeFile(fileName); return true; } catch (ZipException e) { e.printStackTrace(); log.error("刪除文件失敗:\n"+e.getMessage()); return false; } } }