Kompresi Zip merupakan proses memperkecil ukuran data agar dapat disimpan dengan lebih efisien dan juga lebih mempercepat waktu ketika data tersebut di transfer.Gambaran konsep kompressi mirip dengan konsep mencontek.Bayangkan saat ujian, siswa A menuliskan
jawaban pada selembar kertas, melipat-lipat kertas tersebut, lalu
melemparnya kepada siswa B. siswa B menangkapnya, membuka lipatan
kertas, dan membaca jawaban yang tertera.
Perhatikan, kertas yang terlipat bisa dibayangkan sebagai sebuah
file yang dikompress, ukurannya yang lebih kecil
membuatnya untuk berpindah tangan. Tetapi untuk mendapatkan ukuran yang
lebih kecil dan kecepatan transfer, ada yang harus dibayar sebagai
konsekuensinya. Sang penerima (siswa B), harus membuka lipatan kertas
tersebut sebelum dapat membaca jawaban ujian. Kita dapat membayangkan
proses ini sebagai proses dekompressi, ketika file zip sudah kita terima tentu kita akan membukanya dengan melakukan dekompresi.Mungkin seperti itu gambarannya.
Kalau kita sudah paham, kita langsung saja bagaimana membuat sebuah aplikasi kompresi tersebut.
1. Buatlah sebuat antar muka di Netbeans yang kita sebut sebagai GUI [graphic user intervice] seperti di bawah ini.
2. Sesuaikan nama variable dari setiap form agar dalam pemanggilan variable lebih jelas.
Button 1:◦ Text: SaveTo
◦ Variable Name: saveToButton
Button 2:
◦ Text: Add Files
◦ Variable Name: addButton
Button 3:
◦ Text: Remove Files
◦ Variable Name: removeButton
Text field
◦ Text: kosong
◦ Variable Name: jTextField1
List
◦ Model: kosong
◦ Variable Name: jList1
3. Setelah itu kita tambahkan JFileChooser, File, dan juga DefaultListModel pada FormAwal
tambahkan juga di dalam constructor inisialisasi untuk objek dari DefaultListModel dan juga setting model untuk jList1.
Private jFileChooser chooser
private DefaultListModel ListModel;
private File fileSave;
public FormAwal(){
initComponents();
listModel = New DefaultListModel();
jList1.setModel(listModel);
}
4. Menambahkan event ke dalam Button SaveTo dengan cara Klik kanan pada
Button SaveTo > pilih 'Events' > pilih 'Action' > pilih 'actionPerformed'.Kemudian tambahkan kode beribut.
chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setMultiSelectionEnabled(false);
if(chooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
fileSave = chooser.getSelectedFile();
if (!chooser.getSelectedFile().getName().toLowerCase().endsWith(".zip")) {
fileSave = new File(fileSave.getPath() + ".zip");
}
if(fileSave == null) {
jTextField1.setText("");
} else {
jTextField1.setText(fileSave.getPath());
}
}
5.Lakukan proses yang sama untuk ButtonAddFiles tambahkan code di bawah.
chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setMultiSelectionEnabled(true);
if(chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
File[] files = chooser.getSelectedFiles();
for(File file: files) {
listModel.addElement(file);
}
}
6. Perlakukan yang sama juga pada Button RemoveFile lalu tambahkan code berikut.
Object[] selected = jList1.getSelectedValues();
if(selected.length != 0) {
for(Object e: selected) {
listModel.removeElement(e);
}
}
7. Tambahkan code berikut di di FormAwal.
8.Yang terakhir tambahkan kembali event pada Button Create lalu sisipkan code berikut.
if(fileSave == null) {
showMessage("'Save To' kosong");
} else if(listModel.getSize() == 0) {
showMessage("File kosong");
} else {
ZipOutputStream zipOutputStream = null;
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream(fileSave);
zipOutputStream = new ZipOutputStream(fileOutputStream);
byte[] buffer = new byte[1024];
Enumeration<File> enumeration = (Enumeration<File>) listModel.elements();
while (enumeration.hasMoreElements()) {
File file = enumeration.nextElement();
FileInputStream stream = null;
try {
stream = new FileInputStream(file);
ZipEntry entry = new ZipEntry(file.getName());
zipOutputStream.putNextEntry(entry);
for (int i = stream.read(buffer); i != -1; i = stream.read(buffer)) {
zipOutputStream.write(buffer, 0, i);
}
zipOutputStream.closeEntry();
} catch (IOException exception) {
} finally {
if (stream != null) {
stream.close();
}
}
}
} catch(IOException exception) {
} finally {
if (zipOutputStream != null) {
try {
zipOutputStream.close();
} catch (IOException ex) {
}
}
}
resetData();
}
Jika sudah tidak ada error. Tambahkan kode program berikut ke dalam main method yang ada
di kelas ZipMaker.java
public static void main(String[] args) {
// TODO code application logic here
new FormAwal().setVisible(true);
}
Oke selesai, tinggal kita coba Runing.
Comments