http://emailcashpro.com http://emailcashpro.com

Meng-kopi file pada Java

        Meng-kopi file pada Java



       Mengkopi suatu file adalah operasi biasa, dan sistem operasi manapun memiliki perintah atau cara untuk melakukannya. Akan tetapi kita juga bisa membuat program Java untuk melakukannya.
      Karena program harus bisa mengkopi file jenis apapun, kita tidak bisa menganggap data di dalam file adalah data yang bisa dibaca manusia. File lagu atau video misalnya berisi deretan byte yang merupakan representasi digital dari lagu atau video tersebut.
       Oleh karena itu kita harus menggunakan InputStream dan OutputStream untuk melakukan operasi baca tulis yang bisa menangani data biner, bukan Reader dan Writer yang hanya bisa menangani data yang bisa dibaca manusia.
      Program yang kita buat akan mengkopi beberapa byte sekaligus dari InputStream ke OutputStream, akan tetapi kita membutuhkan tempat sementara di mana data tersebut akan ditempatkan sebelum data tersebut ditulis kembali pada OutputStream. Tempat sementara tersebut disebut buffer yang merupakan array berukuran tertentu, misalnya 4096 byte (atau 4 kilo byte).
     Jika sumber adalah variabel bertipe InputStream, maka byteTerbaca = sumber.read(buffer) akan mengisi penuh buffer. Metode ini mengembalikan int yang merupakan berapa byte yang efektif diambil oleh sumber, kemudian diletakkan dalam variabel byteTerbaca. Jika hasilnya -1, berarti tidak ada lagi data yang bisa diambil dari dalam sumber.
     Begitu juga jika kopi adalah keluaran yang bertipe OutputStream maka kopi.write(buffer, 0, byteTerbaca) menulis deretan byte dari buffer dari posisi 0 hingga byteTerbaca ke aliran keluaran kopi.
Sehingga secara umum perintah-perintah di atas dapat dirangkum menjadi :
byte[] buffer = new byte[4096];
int byteTerbaca;

while((byteTerbaca = sumber.read(buffer)) != -1)
    kopi.write(buffer, 0, byteTerbaca);
Perintah kopi-file pada sistem operasi baik DOS/Windows atau LINUX/UNIX menggunakan perintah pada konsol yang menambahkan file sumber dan file tujuannya. Misalnya, pada konsol Windows, kita bisa menggunakan "copy awal.dat akhir.dat" untuk mengkopi file awal.dat ke file bernama akhir.dat.
Tambahan parameter pada konsol ini disebut argumen baris perintah. Argumen baris perintah ini bisa juga digunakan dalam program Java. Dalam Java argumen baris perintah ini diisi dalam array String[] bernama args, yang kemudian dimasukkan sebagai parameter dalam subrutin main(). Ingat bagaimana "biasanya" subrutin main() dideklarasikan sebagai public static void main(String[] args).
Pada program Java yang sudah dikompilasi, kita bisa memanggilnya dengan "java KopiFile awal.dat akhir.dat" jika KopiFile adalah nama kelas yang akan kita buat untuk mengkopi file. args[0] akan berisi awal.dat sedangkan args[1] akan berisi akhir.dat.
Program yang akan kita buat menerima input dari baris perintah. Kemudian program akan mengecek apakah kedua parameter tersebut berisi nama file dengan benar. Jika salah satu parameternya kosong, maka program akan menampilkan pesan kesalahan. Program juga akan mengecek apakah akhir.dat merupakan file yang sudah ada sebelumnya, kemudian memberi pertanyaan kepada user apakah isi file ini ingin ditindih dengan isi file awal.dat. Jika ya, maka operasi akan diteruskan, jika tidak maka program akan dihentikan.
Berikut ini adalah listing lengkap program KopiFile, yang bisa diunduh di sini dan diimport ke dalam Eclipse.
import java.io.*;

public class KopiFile {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // Mengecek apakah argumen program cukup untuk meneruskan program
        // Dibutuhkan dua argumen, yaitu sumberFile dan tujuanFile
        if (args.length < 2) {
            System.out.println("Cara menjalankan program : " +
                       "java KopiFile sumberFile tujuanFile");
            return;
        }

        String sumberNamaFile = args[0];
        String tujuanNamaFile = args[1];

        File sumberFile = new File(sumberNamaFile);
        File kopiFile = new File(tujuanNamaFile);

        // Jika kopi file sudah ada, kita akan tanyakan apakah file tujuan
        // akan ditimpa
        if (kopiFile.exists()) {
            // buat objek baru untuk mengambil input
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String timpaFile = null;

            System.out.print("Apakah Anda ingin menimpa " + tujuanNamaFile + " ? (y/t) ");
            try {
                timpaFile = br.readLine();
            } catch(IOException ioe) {
                System.out.println("Kesalahan IO terjadi");
                System.exit(1);
            }

            // jika jawabannya tidak, hentikan program
            if (timpaFile.equalsIgnoreCase("t"))
                return;
        }

        // Di sini kita siap untuk mengkopi file
        // Buat aliran input dan output
        FileInputStream sumber = null;
        try {
            sumber = new FileInputStream(sumberFile);
        } catch (FileNotFoundException e) {
            System.out.println("File sumber tidak ada, berupa direktori " +
                       "atau tidak bisa dibuka, program dihentikan!");
            return;
        }

        FileOutputStream kopi = null;
        try {
            kopi = new FileOutputStream(tujuanNamaFile);
        } catch (FileNotFoundException e) {
            System.out.println("File tujuan tidak valid atau tidak bisa ditulis, " +
                       "program dihentikan!");
            return;
        }

        byte[] buffer = new byte[4096];
        int byteTerbaca;

        try {
            while((byteTerbaca = sumber.read(buffer)) != -1)
                kopi.write(buffer, 0, byteTerbaca);
        } catch (IOException e) {
            System.out.println("Ada masalah di tengah pengkopian program");
            return;
        }

        System.out.println("Kopi file selesai dijalankan!");
    }

}
Perlu diingat bahwa program ini tidak bisa dijalankan lewat Eclipse. Jika Anda mencoba menjalankan lewat Eclipse, maka tampilan kesalahan akan muncul, karena tidak ada parameter yang diberikan.
http://java.lyracc.com/sites/java.lyracc.com/files/KopiFile-gbr2.gif
Untuk menjalankan program, Anda harus membuka konsol pada Windows dengan Start -> Run -> kemudian ketik cmd dan enter. Setelah itu pergi ke direktori tempat proyek Anda berada pada Eclipse. Misalnya pada komputer saya, saya meletakkan semua proyek Eclipse pada c:\belajarjava.lyracc.com\KopiFile. Di dalamnya seharusnya Anda akan menemui 2 direktori, yaitu src dan bin. src adalah tempat di mana kode sumber berada, sedangkan bin adalah tempat dimana hasil kompilasi berada. Eclipse akan melakukan kompilasi secara otomatis.
Berikut screenshot hasil jalannya program. Di sini saya mengkopi file dari c:\belajarjava.lyracc.com\KopiFile\src\KopiFile.java ke c:\belajarjava.lyracc.com\Kopi123.java.
http://java.lyracc.com/sites/java.lyracc.com/files/KopiFile-gbr1.gif



Sisipan