如何在Java中加密和解密zip檔案?
大家好,我是指北君。
在本文中,我們來學習如何用Zip4j庫建立受密碼保護的壓縮檔案並將其解壓。
依賴
讓我們先把 zip4j 依賴關係新增到我們的 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: …
為了解決這個問題,我們必須確保該檔案是手動建立並放置在專案資料夾中,或者我們必須從Java中建立它。
File fileToAdd = new File("aFile.txt"); if (!fileToAdd.exists()) { fileToAdd.createNewFile(); }
另外,在我們完成了新的ZipFile之後,需要及時關閉資源:
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);
建立一個分割的壓縮檔案
我們可以通過使用createSplitZipFile和createSplitZipFileFromFolder方法,``將壓縮檔案分割成幾個檔案。
ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray()); int splitLength = 1024 * 1024 * 10; zipFile.createSplitZipFile(Arrays.asList(new File("aFile.txt")), zipParameters, true, splitLength);
zipFile.createSplitZipFileFromFolder(new File("/users/folder_to_add"), zipParameters, true, splitLength);
splitLength的單位是位元組。
提取所有檔案
提取檔案也同樣簡單。我們可以用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");
總結
綜上所述,我們已經學會了如何用Zip4j庫在Java中建立受密碼保護的壓縮檔案並將其解壓。
- Spring中實現非同步呼叫的方式有哪些?
- 帶引數的全型別 Python 裝飾器
- 整理了幾個Python正則表示式,拿走就能用!
- SOLID:開閉原則Go程式碼實戰
- React中如何引入CSS呢
- 一個新視角:前端框架們都卷錯方向了?
- 編碼中的Adapter,不僅是一種設計模式,更是一種架構理念與解決方案
- 手寫程式語言-遞迴函式是如何實現的?
- 一文搞懂模糊匹配:定義、過程與技術
- 新來個阿里 P7,僅花 2 小時,做出一個多執行緒永動任務,看完直接跪了
- Puzzlescript,一種開發H5益智遊戲的引擎
- @Autowired和@Resource到底什麼區別,你明白了嗎?
- CSS transition 小技巧!如何保留 hover 的狀態?
- React如此受歡迎離不開這4個主要原則
- LeCun再炮轟Marcus: 他是心理學家,不是搞AI的
- Java保證執行緒安全的方式有哪些?
- 19個殺手級 JavaScript 單行程式碼,讓你看起來像專業人士
- Python 的"self"引數是什麼?
- 別整一坨 CSS 程式碼了,試試這幾個實用函式
- 再有人問你什麼是MVCC,就把這篇文章發給他!