Layaknya database, file teks juga bisa digunakan untuk menyimpan data-data yang sifatnya sederhana dan tidak membutuhkan record yang banyak. Namun, hal ini tidak dianjurkan dalam mengerjakan suatu sistem yang rumit. Inilah yang membedakan penggunaan file teks dengan database.
Pada dasarnya, proses penyimpanan terdiri dari tambah data, ubah data, dan hapus data. Tidak seperti pada aplikasi database yang memiliki perintah khusus untuk menjalankan proses penyimpanan tersebut secara langsung, pada aplikasi fileteks tidak menyediakan perintah-perintah tersebut. Melainkan, programmer harus pintar-pintar merumuskan algoritma atau source code-nya dengan syntax yang ada.
Jika kita menggunakan bahasa pemrograman delphi, maka akan ada syntax yang sangat membantu kita dalam melakukan proses penyimpanan data tersebut pada file teks. Dengan menggunakan type...record dan menginisialisasikan suatu variabel ke dalam array satu dimensi untuk dapat dipindahkan data secara otomatis ke dalam file teks. Untuk kasus seperti ini, saya tidak menggunakan bahasa pemrograman delphi karena contoh source code seperti itu sudah banyak tersedia di internet untuk referensinya. Salah satu alasan yang membuat saya tertantang untuk mencobanya dengan menggunakan bahasa pemrograman java karena belum ada saya temukan referensi yang lengkap untuk menjawab kasus penyimpanan data pada file teks layaknya database seperti insert, edit, delete.
Biar lebih memudahkan pembaca dalam memahaminya, sebelumnya saya akan berikan studi kasus sebagai berikut. Suatu data dalam tabel memiliki field atau kolom seperti No_Id, Jns_Id, Nama, Alamat, jk. Masing-masing field tersebut diberikan ukuran atau panjang data secara berurut 17,5,32,52,15,7. Nama file teks diberikan adalah "Data Penyewa.txt". Maka, akan dibuat suatu proses insert, edit, dan delete. Adapun tips dan triknya sebagai berikut :
- Insert (Tambah Data)
- public static void Insert ()
- {
- //variabel data
- String no_id, jns_id, nama, alamat, telp, jk;
- //objek inputan dari keyboard
- Scanner input = new Scanner (System.in);
- //input data dari keyboard
- System.out.print("No Id = ");
- no_id = input.nextLine();
- System.out.print("Jenis Id (KTP/SIM) = ");
- jns_id = input.nextLine();
- System.out.print("Nama = ");
- nama = input.nextLine();
- System.out.print("Alamat = ");
- alamat = input.nextLine();
- System.out.print("No. Telp = ");
- telp = input.nextLine();
- System.out.print("Jenis Kelamin (Pria/Wanita) = ");
- jk = input.nextLine();
- //kondisi jika panjang karakter melebihi batas
- if ((no_id.length()<=pjg_data[0]) &&
- (jns_id.length()<=pjg_data[1]) &&
- (nama.length()<=pjg_data[2]) &&
- (alamat.length()<=pjg_data[3]) &&
- (telp.length()<=pjg_data[4]) &&
- (jk.length()<=pjg_data[5]))
- {
- //Copy file asal ke file baru (temporary)
- CopyTextFile("Data Penyewa.txt","Data Penyewa temp.txt");
- //mulai file teks
- try {
- FileWriter newFile = new FileWriter("Data Penyewa.txt");
- PrintWriter out = new PrintWriter(newFile);
- //jika data pada file temporary tidak null maka salin
- //data file temporary ke file asal
- if (ReadTextFile("Data Penyewa temp.txt")!= null)
- out.print(""+ReadTextFile("Data Penyewa temp.txt"));
- //inputkan data baru ke file teks asal
- out.print(""+no_id);
- for (int i=0; i<(pjg_data[0]-no_id.length()); i++)
- {
- out.print(" ");
- }
- out.print(""+jns_id);
- for (int i=0; i<(pjg_data[1]-jns_id.length()); i++)
- {
- out.print(" ");
- }
- out.print(""+nama);
- for (int i=0; i<(pjg_data[2]-nama.length()); i++)
- {
- out.print(" ");
- }
- out.print(""+alamat);
- for (int i=0; i<(pjg_data[3]-alamat.length()); i++)
- {
- out.print(" ");
- }
- out.print(""+telp);
- for (int i=0; i<(pjg_data[4]-telp.length()); i++)
- {
- out.print(" ");
- }
- out.print(""+jk);
- for (int i=0; i<(pjg_data[5]-jk.length()); i++)
- {
- out.print(" ");
- }
- out.println();
- //tutup operasi file teks, data tidak tersimpan
- //jika tidak di-includ-kan code di bawah ini.
- out.flush();
- out.close();
- //pesan tersimpan
- System.out.println("Data Telah Disimpan");
- System.out.println();
- } catch (IOException e) {
- e.printStackTrace();//eksepsi error handling
- }//akhir fileteks
- }
- else {
- //pesan
- System.out.println("Inputan ada yang melebihi batas");
- }
- }
- public static void CopyTextFile (String filenamereader, String filenamewriter)
- {
- try {
- final BufferedReader br =
- new BufferedReader(new FileReader(filenamereader));
- final BufferedWriter bw =
- new BufferedWriter(new FileWriter(filenamewriter));
- final PrintWriter pw =
- new PrintWriter (bw);
- // Read input stream line by line
- while (true) {
- final String line = br.readLine(); // get next line
- if (line==null) break; // exit when end-of-file
- pw.println (line); // write line
- }
- br.close();
- pw.close();
- } catch (IOException ex) {
- System.err.println(ex);
- }
- }
- public static String ReadTextFile (String filename) {
- File file = new File(filename);
- StringBuffer contents = new StringBuffer();
- BufferedReader reader = null;
- try {
- reader = new BufferedReader(new FileReader(file));
- String text = null;
- // ulangi sampai semua baris terbaca
- while ((text = reader.readLine()) != null) {
- contents.append(text)
- .append(System.getProperty("line.separator"));
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- if (reader != null) {
- reader.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- // tampilkan isi file
- return contents.toString();
- }
- Edit (Ubah Data)
- Delete (Hapus Data)
- public static void Delete(int no_urut)
- {
- try {
- FileWriter newFile = new FileWriter("Data Penyewa.txt");
- PrintWriter out = new PrintWriter(newFile);
- for (int i=0; i<N; i++)
- {
- if (i!=no_urut-1)
- {
- //inputkan data baru ke file teks asal
- out.print(""+newdata[i][0]);
- for (int j=0; j<(pjg_data[0]-newdata[i][0].length()); j++)
- {
- out.print(" ");
- }
- out.print(""+newdata[i][1]);
- for (int j=0; j<(pjg_data[1]-newdata[i][1].length()); j++)
- {
- out.print(" ");
- }
- out.print(""+newdata[i][2]);
- for (int j=0; j<(pjg_data[2]-newdata[i][2].length()); j++)
- {
- out.print(" ");
- }
- out.print(""+newdata[i][3]);
- for (int j=0; j<(pjg_data[3]-newdata[i][3].length()); j++)
- {
- out.print(" ");
- }
- out.print(""+newdata[i][4]);
- for (int j=0; j<(pjg_data[4]-newdata[i][4].length()); j++)
- {
- out.print(" ");
- }
- out.print(""+newdata[i][5]);
- for (int j=0; j<(pjg_data[5]-newdata[i][5].length()); j++)
- {
- out.print(" ");
- }
- out.println();
- }
- }
- //tutup operasi file teks, data tidak tersimpan
- //jika tidak di-includ-kan code di bawah ini.
- out.flush();
- out.close();
- //pesan terhapus
- System.out.println("Data Telah Dihapus");
- System.out.println();
- } catch (IOException e) {
- e.printStackTrace();//eksepsi error handling
- }//akhir fileteks
- }
- View (Tampil Data)
- public static void View()
- {
- CheckLineText("Data Penyewa.txt");
- GetData(pjg_data);
- for (int i=0; i<N; i++)
- {
- for (int j=0; j<M+1; j++)
- {
- String teks = newdata[i][j];
- System.out.print(""+teks);
- }
- System.out.println("");
- }
- System.out.println("");
- }
- public static void CheckLineText (String filename) {
- File file = new File(filename);
- StringBuffer contents = new StringBuffer();
- BufferedReader reader = null;
- try {
- reader = new BufferedReader(new FileReader(file));
- String text = null;
- // ulangi sampai semua baris terbaca
- int i=0;
- while ((text = reader.readLine()) != null) {
- data[i]=text;
- i=i+1;
- }
- N = i;//banyak record
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- if (reader != null) {
- reader.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- public static void GetData(int arr[])
- {
- int tot_pjg=0;
- // cari panjang total teks
- for (int value : arr)
- tot_pjg = tot_pjg+value;
- String str = "", teks="";
- for (int i=0; i<N; i++)
- {
- teks = data[i];// isi variabel string dgn array
- //inisialisasi
- int j=0, k=0, jum=0;
- jum = jum+arr[j];
- // kelompokkan data berdasarkan field/kolom
- while (k<tot_pjg)
- {
- if (k==jum)
- {
- newdata[i][j] = str;
- str="";
- j=j+1;
- jum = jum+arr[j];
- }
- str = str + teks.charAt(k);
- k=k+1;
- }
- M=j;
- //i menyatakan baris, j menyatakan kolom
- //data ditampung dalam array dua dimensi
- newdata[i][j] = str;
- str="";
- }
- }
Prinsip yang digunakan dalam proses insert data ini adalah dengan melakukan pembacaan terlebih dahulu terhadap data yang ada pada file teks "Data Penyewa.txt kemudian menyimpan data yang dibaca tersebut pada file teks yang baru. Misal, "Data Penyewa temp.txt" secara sementara. Kemudian menggabungkan secara bersamaan data yang ada dari file teks yang baru tadi dengan data baru.
Prinsip metode penghapusan data pada file teks disini dengan memanggil data array dua dimensi yang telah didefenisikan dan diisi berdasarkan data pada file asal. Record yang ingin dihapus atau dibuang tidak diikutsertakan dalam menginputkan data array dua dimensi tersebut ke dalam file teks. Hal ini sama halnya dalam proses input data baru.
Bagaimana proses menampilkan data-data yang ada pada file teks? Pertama, langkah yang harus dilakukan adalah mengecek berapa banyak record atau baris data yang tersedia. Berdasarkan record-record tersebut, data diambil sesuai dengan ukran karakter yang tersedia pada masing-masing field. Dan ditampung dalam array dua dimensi yang baru. Dalam hal ini, pembacaan karakter jangan sampai salah karena dapat mempengaruhi program alias error. Jika program error, cobalah cek methode yang memanggil data pada file teks tersebut dan menyimpannya ke dalam array dua dimensi.
No comments:
Post a Comment