ZIP file merupakan salah satu alternatif bagi kita dalam menyimpan berbagai berkas/file. Satu ZIP file bisa berisi berbagai file atau folder yang talah dilakukan kompresi dengan suatu algoritma tertentu. Suatu file ZIP juga memiliki entry yang berisi path atau lokasi asli file tersebut dalam suatu archive. Proses kompres data ZIP dilakukan secara individual, hal ini memungkinkan kita untuk melakukan ekstrak atau menambahkan file baru, tanpa harus melakukan kompres atau dekompres untuk seluruh file. Bagaimana seandainya jika kita ingin menyimpan berbagai file dalam bentuk ZIP pada Java? Pada contoh kali ini, kita mempunyai file teks sederhana yang akan dimasukkan kedalam ZIP file, selain itu aplikasi kita melakukan suatu operasi yang menghasilkan data berbentuk string yang akan kita coba simpan kedalam suatu file yang disisipkan ke dalam sebuah archive ZIP. Sehingga hasil yang diharapkan file ZIP tersebut memiliki dua buah file.
public static void main(String[] args) throws IOException | |
{ | |
WriteZIPExample test = new WriteZIPExample(); | |
test.writeZipFile(); | |
} | |
public void writeZipFile() throws IOException | |
{ | |
// diasumsikan ZIP file yg akan disisipkan | |
// atau kita dapat membuat fungsi utk create file zip baru | |
FileOutputStream fStream = new FileOutputStream("myZip.zip"); | |
ZipOutputStream zStream = new ZipOutputStream(fStream); | |
// buat ZIP entry, masukkan ke dalam archive. data ditambahkan diakhir : | |
ZipEntry fileEntry = new ZipEntry("newFile.txt"); | |
zStream.putNextEntry(fileEntry); | |
// asumsikan alokasi memori dapat menghandle ukuran data, atau | |
// tambahkan fungsi penngecekan size dahulu | |
byte[] buf = new byte[16384]; | |
FileInputStream inStream = new FileInputStream("newFile.txt"); | |
int readCount = inStream.read(buf); | |
zStream.write(buf, 0, readCount); | |
zStream.closeEntry(); | |
// Tambahkan entry baru, berupa String dari operasi aplikasi | |
ZipEntry stringEntry = new ZipEntry("stringEntry"); | |
zStream.putNextEntry(stringEntry); | |
// Tambahkan data | |
String s = "Aplikasi menghasilkan String\nData ditulis ke dalam file"; | |
zStream.write(s.getBytes(), 0, s.length()); | |
//jangan lupa tutup entry | |
zStream.closeEntry(); | |
// Setelah operasi semua dijalankan, close stream | |
zStream.close(); | |
} |
Metode tersebut masih cukup sederhana, karena kita seharusnya juga perlu melakukan pengecekan eksistensi file dan penanganan jika terjadi kesalahan, dimana sengaja tidak saya sampaikan disini agar lebih fokus ke permasalahan, namun saya yakin teman-teman mampu menyempurnakan nya. Atau jika teman-teman tidak ingin membuang waktu untuk menuliskan semua fungsi dari awal, dapat mencoba menggunakan library ZIP4J, yang menurut saya cukup powerful hingga dapat melihat progress monitor ketika melakukan kompres/dekompres. Jika ada kesempatan, mungkin akan saya bahas di lain kesempatan
Semoga bermanfaat