1. Overview
In a previous tutorial, we show how to zip and unzip in Java with the help of the java.util.zip package. But we don’t have any standard Java library to create password-protected zip files.
In this tutorial, we'll learn how to create password-protected zip files and unzip them with the Zip4j library. It's the most comprehensive Java library for zip files.
2. Dependencies
Let's start by adding the zip4j dependency to our pom.xml file:
<dependency>
<groupId>net.lingala.zip4j</groupId>
<artifactId>zip4j</artifactId>
<version>2.9.0</version>
</dependency>
3. Zip a File
First, we'll use the zipFile method to zip a file named aFile.txt into a password-protected archive named compressed.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"));
The setCompressionLevel line is optional. We can choose from level FASTEST to ULTRA (the default is NORMAL).
In this example, we've used AES encryption. If we want to use Zip standard encryption, we just replace AES with ZIP_STANDARD.
4. Zip Multiple Files
Let's modify the code a bit so that we can compress multiple files at once:
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);
Instead of using the addFile method, we use addFiles and pass in a List of files.
5. Zip a Directory
We can zip a folder simply by replacing the addFile method with addFolder:
ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
zipFile.addFolder(new File("/users/folder_to_add"), zipParameters);
6. Creating a Split Zip File
We can split the zip file over several files when the size exceeds a particular limit by using createSplitZipFile and createSplitZipFileFromFolder methods:
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);
The unit of splitLength is bytes.
7. Extracting All Files
Extracting files is just as simple. We can extract all files from our compressed.zip with the extractAll method:
ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
zipFile.extractAll("/destination_directory");
8. Extracting a Single File
And if we just want to extract a single file from compressed.zip, we can use the extractFile method:
ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
zipFile.extractFile("aFile.txt", "/destination_directory");
9. Conclusion
In summary, we've learned how to create password-protected zip files and unzip them in Java with the Zip4j library.
The implementation of these examples can be found over on GitHub.
The post How to Create Password-Protected Zip Files and Unzip Them in Java first appeared on Baeldung.