在本文中,我們來學(xué)習(xí)如何用Zip4j庫創(chuàng)建受密碼保護(hù)的壓縮文件并將其解壓。
依賴
讓我們先把 zip4j
依賴關(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 "在磁盤上不存在,該方法將拋出一個(gè)異常。net.lingala.zip4j.exception.ZipException File does not exist: …
為了解決這個(gè)問題,我們必須確保該文件是手動(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
方法來壓縮一個(gè)文件夾。
ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
zipFile.addFolder(new File("/users/folder_to_add"), zipParameters);
創(chuàng)建一個(gè)分割的壓縮文件
我們可以通過使用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庫在Java中創(chuàng)建受密碼保護(hù)的壓縮文件并將其解壓。
-
JAVA
+關(guān)注
關(guān)注
19文章
2976瀏覽量
105215 -
Zip
+關(guān)注
關(guān)注
0文章
17瀏覽量
8662 -
磁盤
+關(guān)注
關(guān)注
1文章
380瀏覽量
25294 -
文件
+關(guān)注
關(guān)注
1文章
571瀏覽量
24834 -
加密
+關(guān)注
關(guān)注
0文章
305瀏覽量
24020
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
Protel在線教程:如何在PCB文件中加漢字
![Protel在線教程:如<b class='flag-5'>何在</b>PCB<b class='flag-5'>文件</b><b class='flag-5'>中加</b>漢字](https://file1.elecfans.com//web2/M00/A5/91/wKgZomUMOQiAP2ajAADtZfJYwjI545.jpg)
CC2541上微信的加密和解密
labview加密解密文件
ZigBee的加密和解密介紹
如何在Python中加密和解密數(shù)據(jù)
RT1020總線加密引擎是否加密和解密?
數(shù)據(jù)加密和解密,數(shù)據(jù)加密和解密原理是什么?
java實(shí)現(xiàn)非對(duì)稱加密算法的過程
![<b class='flag-5'>java</b>實(shí)現(xiàn)非對(duì)稱<b class='flag-5'>加密</b>算法的過程](https://file1.elecfans.com//web2/M00/A7/0F/wKgZomUMQhyAaHNjAAAkvYVj-d0844.png)
單片機(jī)的加密和解密
云存儲(chǔ)下可追蹤的外包解密屬性加密方案
![云存儲(chǔ)下可追蹤的外包<b class='flag-5'>解密</b>屬性<b class='flag-5'>加密</b>方案](https://file.elecfans.com/web1/M00/46/2B/o4YBAFqVB-qAbDJ-AABos11wCS0364.jpg)
詳細(xì)解讀Go加密解密算法
GPG加密和解密文件在Linux中使用
![GPG<b class='flag-5'>加密</b><b class='flag-5'>和解密</b><b class='flag-5'>文件</b>在Linux中使用](https://file1.elecfans.com//web2/M00/82/B5/wKgaomRd4POAKV-tAAH9ntWiEKQ481.jpg)
評(píng)論