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