栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【文件压缩解压工具类-含密码】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【文件压缩解压工具类-含密码】

文件压缩解压工具类-含密码
  • 一、zip4j简介
  • 二、zip4j工具类使用步骤
    • 1.添加maven依赖
    • 2.工具类代码
    • 3.调用测试
  • 三、结语


一、zip4j简介

zip4j功能比较强大,支持加密、解密压缩,支持文件的添加、删除等。

zip4j官网:zip4j官网 - 可以在"download"页面下载官方示例进行学习

特征:

  • 从 Zip 文件中创建、添加、提取、更新、删除文件
  • 读/写受密码保护的 Zip 文件
  • AES 128/256 加密/解密
  • 标准 Zip 加密/解密
  • Zip64 格式
  • 存储(无压缩)和放气压缩方法
  • 从 Split Zip 文件中创建或提取文件(例如:z01、z02、…zip)
  • Unicode 文件名
  • 进度监视器

二、zip4j工具类使用步骤 1.添加maven依赖

	net.lingala.zip4j
	zip4j
	1.3.2




	org.projectlombok
	lombok
	1.18.16



	org.apache.commons
	commons-lang3
	3.7

2.工具类代码
package com.ctsi.dbbackup.core.util;

import lombok.extern.slf4j.Slf4j;
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.apache.commons.lang3.StringUtils;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;


@Slf4j
public class ZipUtil {
    
    public static void 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.isNotEmpty(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();
            if (Objects.isNull(fs) || fs.length == 0) {
                throw new RuntimeException("文件夹下无任何文件...");
            }

            // 遍历文件夹下所有的文件、文件夹
            for (File f : fs) {
                if (f.isDirectory()) {
                    zipFile.addFolder(f.getPath(), parameters);
                    continue;
                }
                zipFile.addFile(f, parameters);
            }
        } catch (ZipException e) {
            log.error("压缩文件【" + srcFilePath + "】到路径【" + zipPathFileName + "】失败:n" + e.getMessage());
            throw new RuntimeException("压缩文件失败...");
        }
    }

    
    public static void 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);
        } catch (ZipException e) {
            log.error("解压文件【" + zipFileFullName + "】到路径【" + filePath + "】失败:n" + e.getMessage());
            throw new RuntimeException("解压文件失败...");
        }
    }

    
    public static boolean addFilesToZip(String zipFullFileName, List fullFileNameList, String rootFolderInZip) {
        try {
            ZipFile zipFile = new ZipFile(zipFullFileName);
            ArrayList 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(File.separator)) {
                    rootFolderInZip = rootFolderInZip + File.separator;
                }
                parameters.setRootFolderInZip(rootFolderInZip);
            }
            zipFile.addFiles(addFiles, parameters);
            return true;
        } catch (ZipException e) {
            log.error("添加文件失败:n" + e.getMessage());
            return false;
        }
    }

    
    public static boolean deleteFileInZip(String zipFullFileName, String fileName) {
        try {
            ZipFile zipFile = new ZipFile(zipFullFileName);
            zipFile.removeFile(fileName);
            return true;
        } catch (ZipException e) {
            log.error("删除文件失败:n" + e.getMessage());
            return false;
        }
    }
}
3.调用测试
  • main方法
public static void main(String[] args) {
    zipFile("E:/opt/aaa", "E:/opt/aaa/test.zip", "123456");
}
  • 结果
  • 解压需输入压缩时的密码

三、结语

以上便是笔者使用zip4j自行封装的常用方法。若有出入的地方, 欢迎博友们指正,笔者感激不尽!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/680785.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号