依賴包
<dependency> <groupId>net.lingala.zip4j</groupId> <artifactId>zip4j</artifactId> <version>1.3.1</version> </dependency>
執行用例
package com.example.one.utils; 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 java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; public class FourZipFile { /** * 壓縮單個文件並加密 */ public static String zipFile(String file, String fileOutPath, String passWord, String fileName) throws FileNotFoundException { FileInputStream fileInputStream = new FileInputStream(file); ZipParameters parameters = new ZipParameters(); // 壓縮方式 parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); // 壓縮級別 parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); // 開啟加密 parameters.setSourceExternalStream(true); // 文件名稱 parameters.setFileNameInZip(fileName); if (!"".equals(passWord)) { parameters.setEncryptFiles(true); // 加密方式 parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD); // 設置加密密碼 parameters.setPassword(passWord.toCharArray()); } try { ZipFile zipFile = new ZipFile(fileOutPath + fileName + ".zip"); zipFile.addStream(fileInputStream, parameters); // 加密解壓后刪除源文件 deleteFile(file); } catch (ZipException e) { e.printStackTrace(); } return fileOutPath + fileName + ".zip"; } /** * 刪除文件 */ private static boolean deleteFile(String sPath) { boolean flag = false; File file = new File(sPath); // 路徑為文件且不為空則進行刪除 if (file.isFile() && file.exists()) { file.delete(); flag = true; } return flag; } // 加密文件並壓縮 public static void main(String[] args) throws FileNotFoundException { String filePath = "/Users/xuweiqiang/Desktop/test.txt"; String fileOutPath = "/Users/xuweiqiang/Desktop/"; String passWord = "123"; String fileName = "hello.txt"; String name = zipFile(filePath,fileOutPath,passWord,fileName); System.out.println(name); } }