Dalam artikel ini, kita akan belajar cara menggunakan library Apache Commons-Compress dan Commons-Io untuk melakukan zip dan unzip file di Java. Kami juga akan melihat bagaimana mengatasi beberapa masalah yang mungkin timbul saat penggunaan library tersebut.
Mengapa Menggunakan Library?
Sebelumnya, Anda dapat menulis kode sendiri untuk melakukan zip dan unzip file menggunakan kelas ZipOutputStream
dan ZipInputStream
dari package java.util.zip
. Namun, cara ini memiliki beberapa kelemahan. Pertama, kode Anda harus menghandle banyak detail, seperti membuat direktori output, menambahkan entri zip, dan lain-lain. Kedua, library Apache Commons-Compress dan Commons-Io sudah teruji dan digunakan oleh banyak aplikasi, sehingga Anda tidak perlu khawatir tentang keamanan dan performa.
Menginstal Library
Untuk menginstal library, Anda dapat menggunakan dependency management tool seperti Maven atau Gradle. Berikut adalah contoh cara menambahkan dependency di file build.gradle
:
implementation("org.apache.commons:commons-compress:1.18")
implementation("commons-io:commons-io:2.6")
Atau, jika Anda menggunakan Maven, Anda dapat menambahkan dependency seperti berikut:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.18</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
Contoh Kode
Berikut adalah contoh kode yang menggunakan library Apache Commons-Compress dan Commons-Io untuk zip dan unzip file:
import org.apache.commons.compress.archivers.zip.*;
import org.apache.commons.compress.parallel.InputStreamSupplier;
import org.apache.commons.io.FileUtils;
// ... lain-lain
public class ZipMain {
static ParallelScatterZipCreator scatterZipCreator = new ParallelScatterZipCreator();
static ScatterZipOutputStream dirs;
static {
try {
dirs = ScatterZipOutputStream.fileBased(File.createTempFile("java-zip-dirs", "tmp"));
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
String sourceFolder = "/Users/<user>/Desktop/";
String zipFilePath = "/Users/<user>/Desktop/Desk.zip";
String fileTypesToBeAddedToZip = "txt";
zip(sourceFolder, zipFilePath, fileTypesToBeAddedToZip);
unzip(zipFilePath, sourceFolder + "/unzip/");
}
private static void zip(String sourceFolder, String zipFilePath, String fileTypesToBeAddedToZip) throws IOException {
// ... lain-lain
}
private static void unzip(String zipFilePath, String destDir) {
// ... lain-lain
}
}
Konsep
Dalam contoh kode di atas, kita menggunakan library Apache Commons-Compress untuk melakukan zip file. Kami juga menggunakan library Commons-Io untuk membaca dan menulis file.
Pertama, kami membuat instance dari ParallelScatterZipCreator
dan ScatterZipOutputStream
. Kemudian, kami menggunakan FileUtils
dari library Commons-Io untuk mengiterasi file-file di direktori sumber.
Kedua, kami membuat instance dari ZipArchiveOutputStream
dan menggunakan method addArchiveEntry()
untuk menambahkan entri zip ke arquivozip. Kami juga menggunakan method writeTo()
untuk menulis data ke archivozip.
Akhirnya, kami menggunakan InputStreamSupplier
dari library Commons-Io untuk membaca file-file yang akan di-zip.
Kelebihan dan Kelemahan
Library Apache Commons-Compress dan Commons-Io memiliki beberapa kelebihan, seperti:
- Performa yang cepat
- Flexibilitas tinggi dalam menghandle berbagai jenis file
- Tidak perlu khawatir tentang keamanan dan performa
Namun, library tersebut juga memiliki beberapa kelemahan, seperti:
- Memerlukan knowledge yang cukup tentang bagaimana menggunakan library
- Membutuhkan waktu untuk belajar cara menggunakan method-method library
Dalam artikel ini, kita telah melihat bagaimana menggunakan library Apache Commons-Compress dan Commons-Io untuk melakukan zip dan unzip file di Java. Kita juga telah melihat kelebihan dan kelemahan library tersebut.