如何在Java中加密和解密zip檔案?

語言: CN / TW / HK

大家好,我是指北君。

在本文中,我們來學習如何用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中建立受密碼保護的壓縮檔案並將其解壓。