Menggunakan Commons-Compress dan Commons-Io untuk Zip dan Unzip File di Java

Menggunakan Commons-Compress dan Commons-Io untuk Zip dan Unzip File di Java

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.