詳解如何在Java中加密和解密zip文件
依賴(lài)
讓我們先把 zip4j
依賴(lài)關(guān)系添加到我們的 pom.xml
文件中。
<dependency> ????<groupId>net.lingala.zip4j</groupId> ????<artifactId>zip4j</artifactId> ????<version>2.9.0</version> </dependency>
壓縮一個(gè)文件
首先,我們將使用ZipFile addFile()
方法將一個(gè)名為aFile.txt
的文件壓縮到一個(gè)名為compressed.zip
的有密碼保護(hù)的 zip 文件。
ZipParameters?zipParameters?=?new?ZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setCompressionLevel(CompressionLevel.HIGHER); zipParameters.setEncryptionMethod(EncryptionMethod.AES); ZipFile?zipFile?=?new?ZipFile("compressed.zip",?"password".toCharArray()); zipFile.addFile(new?File("aFile.txt"),?zipParameters);
setCompressionLevel
一行是可選的。我們可以從FASTEST
到ULTRA
級(jí)別中選擇(默認(rèn)是NORMAL
)。
在這個(gè)例子中,我們使用了AES加密。如果我們想使用Zip標(biāo)準(zhǔn)加密,我們只需用ZIP_STANDARD
替換AES
。
注意,如果文件 "aFile.txt "在磁盤(pán)上不存在,該方法將拋出一個(gè)異常。net.lingala.zip4j.exception.ZipException File does not exist: …
為了解決這個(gè)問(wèn)題,我們必須確保該文件是手動(dòng)創(chuàng)建并放置在項(xiàng)目文件夾中,或者我們必須從Java中創(chuàng)建它。
File?fileToAdd?=?new?File("aFile.txt"); if?(!fileToAdd.exists())?{ ????fileToAdd.createNewFile(); }
另外,在我們完成了新的ZipFile
之后,需要及時(shí)關(guān)閉資源:
zipFile.close();
壓縮多個(gè)文件
讓我們修改一下代碼,以便我們能夠一次壓縮多個(gè)文件。
ZipParameters?zipParameters?=?new?ZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(EncryptionMethod.AES); List<File>?filesToAdd?=?Arrays.asList( ??new?File("aFile.txt"), ??new?File("bFile.txt") ); ZipFile?zipFile?=?new?ZipFile("compressed.zip",?"password".toCharArray()); zipFile.addFiles(filesToAdd,?zipParameters);
我們不使用addFile
方法,而是使用addFiles()
并傳入一個(gè)List
的文件。
壓縮一個(gè)目錄
我們可以簡(jiǎn)單地用addFolder
代替addFile
方法來(lái)壓縮一個(gè)文件夾。
ZipFile?zipFile?=?new?ZipFile("compressed.zip",?"password".toCharArray()); zipFile.addFolder(new?File("/users/folder_to_add"),?zipParameters);
創(chuàng)建一個(gè)分割的壓縮文件
我們可以通過(guò)使用createSplitZipFile
和createSplitZipFileFromFolder
方法,``將壓縮文件分割成幾個(gè)文件。
ZipFile?zipFile?=?new?ZipFile("compressed.zip",?"password".toCharArray()); int?splitLength?=?1024?*?1024?*?10;?//10MB zipFile.createSplitZipFile(Arrays.asList(new?File("aFile.txt")),?zipParameters,?true,?splitLength);
zipFile.createSplitZipFileFromFolder(new?File("/users/folder_to_add"),?zipParameters,?true,?splitLength);
splitLength
的單位是字節(jié)。
提取所有文件
提取文件也同樣簡(jiǎn)單。我們可以用extractAll()
方法從我們的compressed.zip
中提取所有文件。
ZipFile?zipFile?=?new?ZipFile("compressed.zip",?"password".toCharArray()); zipFile.extractAll("/destination_directory");
提取單個(gè)文件
如果我們只想從compressed.zip
中提取一個(gè)文件,我們可以使用extractFile()
方法。
ZipFile?zipFile?=?new?ZipFile("compressed.zip",?"password".toCharArray()); zipFile.extractFile("aFile.txt",?"/destination_directory");
總結(jié)
綜上所述,我們已經(jīng)學(xué)會(huì)了如何用Zip4j庫(kù)在Java中創(chuàng)建受密碼保護(hù)的壓縮文件并將其解壓。
到此這篇關(guān)于詳解如何在Java中加密和解密zip文件的文章就介紹到這了,更多相關(guān)Java加密解密zip內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)獲取小程序帶參二維碼并保存到本地
這篇文章主要介紹了Java實(shí)現(xiàn)獲取小程序帶參二維碼并保存到本地,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10Java構(gòu)造函數(shù)與普通函數(shù)用法詳解
本篇文章給大家詳細(xì)講述了Java構(gòu)造函數(shù)與普通函數(shù)用法以及相關(guān)知識(shí)點(diǎn),對(duì)此有興趣的朋友可以參考學(xué)習(xí)下。2018-03-03spring?boot+vue實(shí)現(xiàn)JSAPI微信支付的完整步驟
JSAPI支付是用戶(hù)在微信中打開(kāi)商戶(hù)的H5頁(yè)面,商戶(hù)在H5頁(yè)面通過(guò)調(diào)用微信支付提供的JSAPI接口調(diào)起微信支付模塊完成支付,下面這篇文章主要給大家介紹了關(guān)于spring?boot+vue實(shí)現(xiàn)JSAPI微信支付的相關(guān)資料,需要的朋友可以參考下2022-05-05sqlite數(shù)據(jù)庫(kù)的介紹與java操作sqlite的實(shí)例講解
今天小編就為大家分享一篇關(guān)于sqlite數(shù)據(jù)庫(kù)的介紹與java操作sqlite的實(shí)例講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02java 實(shí)現(xiàn)回調(diào)代碼實(shí)例
本文主要介紹Java的回調(diào)機(jī)制,并附實(shí)例代碼以供大家參考學(xué)習(xí),有需要的小伙伴可以看下2016-07-07Spring?Boot+RabbitMQ?通過(guò)fanout模式實(shí)現(xiàn)消息接收功能(支持消費(fèi)者多實(shí)例部署)
這篇文章主要介紹了Spring?Boot+RabbitMQ?通過(guò)fanout模式實(shí)現(xiàn)消息接收(支持消費(fèi)者多實(shí)例部署),本文通過(guò)案例場(chǎng)景分析給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03java基于jedisLock—redis分布式鎖實(shí)現(xiàn)示例代碼
這篇文章主要介紹了jedisLock—redis分布式鎖實(shí)現(xiàn)示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11