最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用zip4j加密壓縮和解壓文件與文件夾方式

 更新時間:2025年12月27日 14:26:33   作者:棉花糖老丫  
文章介紹了如何使用Java的zip4j庫對文件夾進行加密壓縮,并提供了Java項目的引入和使用步驟,包括引入maven依賴、封裝工具類以及測試結(jié)果

最近項目中有個需求需要對文件夾進行壓縮后傳輸,考慮數(shù)據(jù)泄露安全性問題,需要對壓縮包進行加密,特地查找了下開源壓縮加密類庫,找到了Java語言開發(fā)的zip4j庫,覺得挺好用的,在這分享給大家!

Java項目引入使用步驟如下:

1、引入maven依賴

<dependency>
            <groupId>net.lingala.zip4j</groupId>
            <artifactId>zip4j</artifactId>
            <version>2.11.5</version>
 </dependency>

2、封裝的工具類

import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.model.enums.AesKeyStrength;
import net.lingala.zip4j.model.enums.CompressionLevel;
import net.lingala.zip4j.model.enums.CompressionMethod;
import net.lingala.zip4j.model.enums.EncryptionMethod;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * @desc zip解壓縮工具
 * @author: wcy
 * @date: 2024/1/12
 * @version: 1.0
 */
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);
            if (StringUtils.isNotEmpty(password)) {
                zipFile.setPassword(password.toCharArray());
            }
            ZipParameters parameters = new ZipParameters();
            // 壓縮級別
            parameters.setCompressionMethod(CompressionMethod.DEFLATE);
            parameters.setCompressionLevel(CompressionLevel.NORMAL);

            if(StringUtils.isNotEmpty(password)){
                parameters.setEncryptFiles(true);
                parameters.setEncryptionMethod(EncryptionMethod.AES);
                parameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256);
            }

            // 要打包的文件夾
            File file = new File(srcFilePath);
            if (file.isDirectory()) {
                zipFile.addFolder(file, parameters);
            } else {
                zipFile.addFile(file, 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.toCharArray());
            }
            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(CompressionMethod.DEFLATE);
            parameters.setCompressionLevel(CompressionLevel.NORMAL);
            if(StringUtils.isNotEmpty(rootFolderInZip)){
                if(!rootFolderInZip.endsWith("/")){
                    rootFolderInZip = rootFolderInZip+"/";
                }
                parameters.setRootFolderNameInZip(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;
        }
    }

    public static void main(String[] args) throws ZipException {
        String srcFilePath = "C:\\Users\\test\\Desktop\\project\\video";
        String desFilePath = "C:\\Users\\test\\Desktop\\project\\file";
        String zipPathFileName = "C:\\Users\\test\\Desktop\\project\\video.zip";
        String password = "";
        long begin = System.currentTimeMillis();
        boolean zipResult = zipFile(srcFilePath, zipPathFileName, password);
        long end = System.currentTimeMillis();
        System.out.println("壓縮結(jié)果:" + zipResult + ",耗時:" + (end - begin) + "ms");

        boolean unZipResult = unZipFile(zipPathFileName, desFilePath, password);
        long end2 = System.currentTimeMillis();
        System.out.println("解壓結(jié)果:" + unZipResult + ",耗時:" + (end2 - end) + "ms");
        System.out.println(unZipResult);
    }
}

3、測試結(jié)果

壓縮結(jié)果:true,耗時:3281ms
解壓結(jié)果:true,耗時:590ms

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring中ClassPathXmlApplicationContext類的使用詳解

    Spring中ClassPathXmlApplicationContext類的使用詳解

    這篇文章主要介紹了Spring中ClassPathXmlApplicationContext類的使用詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java實現(xiàn)快速排序算法可視化的示例代碼

    Java實現(xiàn)快速排序算法可視化的示例代碼

    快速排序算法通過多次比較和交換來實現(xiàn)排序,是對冒泡排序算法的一種改進。本文將用Java語言實現(xiàn)快速排序算法并進行可視化,感興趣的可以了解一下
    2022-08-08
  • Java并發(fā)編程之線程間的通信

    Java并發(fā)編程之線程間的通信

    當線程在系統(tǒng)內(nèi)運行時,程序通常無法準確的控制線程的輪換執(zhí)行,但我們可以通過一些機制來保障線程的協(xié)調(diào)運行,本文著重講解線程間的通信機制
    2021-06-06
  • Struts2訪問Servlet的三種方式

    Struts2訪問Servlet的三種方式

    這篇文章主要介紹了Struts2訪問Servlet的三種方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 基于Java匯總Spock框架Mock靜態(tài)資源經(jīng)驗

    基于Java匯總Spock框架Mock靜態(tài)資源經(jīng)驗

    這篇文章主要介紹了基于Java匯總Spock框架Mock靜態(tài)資源經(jīng)驗,前面講了?Spock框架Mock對象、方法經(jīng)驗總結(jié),今天分享一下Spock框架中Mock靜態(tài)資源的實踐經(jīng)驗匯總。分成靜態(tài)資源和混合場景,需要的朋友可以參考一下
    2022-02-02
  • SpringBoot項目.gitignore沒生效的解決方案

    SpringBoot項目.gitignore沒生效的解決方案

    在 Spring Boot 項目中,.gitignore 文件的作用是告訴 Git 哪些文件或目錄不需要被版本控制,但是我們經(jīng)常會遇到gitignore失效的問題,所以本文給大家介紹了為什么.gitignore會失效和解決方案,需要的朋友可以參考下
    2025-06-06
  • java枚舉類型-Enum

    java枚舉類型-Enum

    本文詳細介紹了 Java1.5 引入的新特性枚舉中的關(guān)鍵字enum,運用大量的代碼加以解釋,相信可以幫助到正在學習該知識的小伙伴,大家可以參考一下
    2021-08-08
  • Linux下用java -jar運行可執(zhí)行jar包的方法教程

    Linux下用java -jar運行可執(zhí)行jar包的方法教程

    這篇文章主要給大家介紹了在Linux下用java -jar運行可執(zhí)行jar包的方法教程,文中介紹的非常詳細,相信對大家的工作或者學習具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • 消息中間件ActiveMQ的簡單入門介紹與使用

    消息中間件ActiveMQ的簡單入門介紹與使用

    消息隊列是指利用高效可靠的消息傳遞機制進行與平臺無關(guān)的數(shù)據(jù)交流,并基于數(shù)據(jù)通信來進行分布式系統(tǒng)的集成,這篇文章主要給大家介紹了關(guān)于ActiveMQ的簡單入門介與使用的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • JAVA中尋找最大的K個數(shù)解法

    JAVA中尋找最大的K個數(shù)解法

    尋找最大的K個數(shù),這個是面試中比較常見的一道題,網(wǎng)上也有很多例子,在這里是比較傳統(tǒng)的解法
    2014-04-04

最新評論

天气| 四子王旗| 黎平县| 东至县| 五华县| 晋中市| 洛扎县| 夹江县| 德阳市| 万宁市| 卓资县| 河东区| 宝清县| 武鸣县| 田阳县| 常山县| 贵阳市| 南昌县| 柳河县| 邵阳市| 敦化市| 贵定县| 鹿邑县| 新龙县| 望江县| 都兰县| 阳山县| 额敏县| 安乡县| 育儿| 瑞金市| 枝江市| 桑日县| 新和县| 沙洋县| 洛阳市| 柳州市| 米易县| 加查县| 耿马| 弥渡县|