<!-- https://mvnrepository.com/artifact/net.lingala.zip4j/zip4j --> <dependency> <groupId>net.lingala.zip4j</groupId> <artifactId>zip4j</artifactId> <version>1.3.2</version> </dependency>
或者下载zip4j-1.3.2.jar
以下是对文件压缩的方法,这里只是单个文件压缩,多个变通一下就可以。
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.util.ArrayList; import java.util.UUID; public class ZipComplexCipherUtil { /** * 加密1,winrar,好压2345可直接输入密码解压 */ public void zipFileAndEncrypt(String filePath,String zipFileName,String password) { try { //设置压缩文件参数 ZipParameters parameters = new ZipParameters(); //设置压缩方法 parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); //设置压缩级别 parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); //设置压缩文件是否加密 parameters.setEncryptFiles(true); //设置aes加密强度 parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256); //设置加密方法 parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES); //设置密码 parameters.setPassword(password.toCharArray()); //压缩文件,并生成压缩文件 ArrayList<File> filesToAdd = new ArrayList<File>(); File file = new File(filePath); filesToAdd.add(file); ZipFile zipFile = new ZipFile(zipFileName); zipFile.addFiles(filesToAdd, parameters); } catch (ZipException e) { e.printStackTrace(); } } /** * 加密2:程序加密,不能使用winrar等工具输入密码解压,需要使用解密程序 * 对目录srcFile下的所有文件目录进行先压缩后加密,然后保存为destfile * @param srcFile * 要操作的文件或文件夹 * @param destfile * 压缩加密后存放的文件 * @param keyStr * 密钥 */ public void encryptZip(String srcFile, String destfile, String keyStr) throws Exception { File temp = new File(UUID.randomUUID().toString() + ".zip"); temp.deleteOnExit(); // 先压缩文件 new ZipUtil().zip(srcFile, temp.getAbsolutePath()); // 对文件加密 new CipherUtil().encrypt(temp.getAbsolutePath(), destfile, keyStr); temp.delete(); } /** * 程序解密 * 对文件srcfile进行先解密后解压缩,然后解压缩到目录destfile下 * * @param srcfile * 要解密和解压缩的文件名 * @param destfile * 解压缩后的目录 * @param keyStr * 密钥 */ public void decryptUnzip(String srcfile, String destfile, String keyStr) throws Exception { File temp = new File(UUID.randomUUID().toString() + ".zip"); temp.deleteOnExit(); // 先对文件解密 new CipherUtil().decrypt(srcfile, temp.getAbsolutePath(), keyStr); // 解压缩 new ZipUtil().unZip(temp.getAbsolutePath(),destfile); temp.delete(); } public static void main(String[] args) throws Exception { try{ long l1 = System.currentTimeMillis(); // //加密 // new ZipComplexCipherUtil().encryptZip("D:\\aaa", "D:\\a.zip", "12345"); // //解密 // new ZipComplexCipherUtil().decryptUnzip("D:\\a.zip", "D:\\bbb", "12345"); new ZipComplexCipherUtil().zipFileAndEncrypt("D:\\aaa\\zhmm_db.xlsx","D:\\aaa\\c.zip","123");
long l2 = System.currentTimeMillis(); System.out.println((l2 - l1) + "毫秒."); System.out.println(((l2 - l1) / 1000) + "秒."); }catch(Exception ex){ ex.printStackTrace(); } } }