diff --git a/libraries-io/pom.xml b/libraries-io/pom.xml
index 2f65fd989b..0cea9ae9ac 100644
--- a/libraries-io/pom.xml
+++ b/libraries-io/pom.xml
@@ -29,6 +29,11 @@
commons-vfs2
${vfs.version}
+
+ net.lingala.zip4j
+ zip4j
+ 2.9.0
+
diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/CreateSplitZipFile.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/CreateSplitZipFile.java
new file mode 100644
index 0000000000..cc39bc9dd2
--- /dev/null
+++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/CreateSplitZipFile.java
@@ -0,0 +1,22 @@
+package com.baeldung.java.io.zip4j;
+
+import net.lingala.zip4j.ZipFile;
+import net.lingala.zip4j.exception.ZipException;
+import net.lingala.zip4j.model.ZipParameters;
+import net.lingala.zip4j.model.enums.EncryptionMethod;
+
+import java.io.File;
+import java.util.Arrays;
+
+public class CreateSplitZipFile {
+
+ public static void main(String[] args) throws ZipException {
+ ZipParameters zipParameters = new ZipParameters();
+ zipParameters.setEncryptFiles(true);
+ zipParameters.setEncryptionMethod(EncryptionMethod.AES);
+ 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);
+ }
+}
diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractAllFile.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractAllFile.java
new file mode 100644
index 0000000000..10e7ddd339
--- /dev/null
+++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractAllFile.java
@@ -0,0 +1,12 @@
+package com.baeldung.java.io.zip4j;
+
+import net.lingala.zip4j.ZipFile;
+import net.lingala.zip4j.exception.ZipException;
+
+public class ExtractAllFile {
+
+ public static void main(String[] args) throws ZipException {
+ ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
+ zipFile.extractAll("/destination_directory");
+ }
+}
diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractSingleFile.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractSingleFile.java
new file mode 100644
index 0000000000..4cf466d02b
--- /dev/null
+++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractSingleFile.java
@@ -0,0 +1,12 @@
+package com.baeldung.java.io.zip4j;
+
+import net.lingala.zip4j.ZipFile;
+import net.lingala.zip4j.exception.ZipException;
+
+public class ExtractSingleFile {
+
+ public static void main(String[] args) throws ZipException {
+ ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
+ zipFile.extractFile("aFile.txt", "/destination_directory");
+ }
+}
diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipFolder.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipFolder.java
new file mode 100644
index 0000000000..4d89e8665f
--- /dev/null
+++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipFolder.java
@@ -0,0 +1,19 @@
+package com.baeldung.java.io.zip4j;
+
+import net.lingala.zip4j.ZipFile;
+import net.lingala.zip4j.exception.ZipException;
+import net.lingala.zip4j.model.ZipParameters;
+import net.lingala.zip4j.model.enums.EncryptionMethod;
+
+import java.io.File;
+
+public class ZipFolder {
+
+ public static void main(String[] args) throws ZipException {
+ ZipParameters zipParameters = new ZipParameters();
+ zipParameters.setEncryptFiles(true);
+ zipParameters.setEncryptionMethod(EncryptionMethod.AES);
+ ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
+ zipFile.addFolder(new File("/users/folder_to_add"), zipParameters);
+ }
+}
diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipMultiFile.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipMultiFile.java
new file mode 100644
index 0000000000..dcb860ef92
--- /dev/null
+++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipMultiFile.java
@@ -0,0 +1,27 @@
+package com.baeldung.java.io.zip4j;
+
+import net.lingala.zip4j.ZipFile;
+import net.lingala.zip4j.exception.ZipException;
+import net.lingala.zip4j.model.ZipParameters;
+import net.lingala.zip4j.model.enums.EncryptionMethod;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+
+public class ZipMultiFile {
+
+ public static void main(String[] args) throws ZipException {
+ ZipParameters zipParameters = new ZipParameters();
+ zipParameters.setEncryptFiles(true);
+ zipParameters.setEncryptionMethod(EncryptionMethod.AES);
+
+ List filesToAdd = Arrays.asList(
+ new File("aFile.txt"),
+ new File("bFile.txt")
+ );
+
+ ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
+ zipFile.addFiles(filesToAdd, zipParameters);
+ }
+}
diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipSingleFile.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipSingleFile.java
new file mode 100644
index 0000000000..a5f600df47
--- /dev/null
+++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipSingleFile.java
@@ -0,0 +1,21 @@
+package com.baeldung.java.io.zip4j;
+
+import net.lingala.zip4j.ZipFile;
+import net.lingala.zip4j.exception.ZipException;
+import net.lingala.zip4j.model.ZipParameters;
+import net.lingala.zip4j.model.enums.CompressionLevel;
+import net.lingala.zip4j.model.enums.EncryptionMethod;
+
+import java.io.File;
+
+public class ZipSingleFile {
+
+ public static void main(String[] args) throws ZipException {
+ 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"));
+ }
+}