Baca Tulis File di Java

Sedikit banyak dalam penerapan aplikasi dunia nyata, proses baca-tulis file hampir mutlak diperlukan. Untuk proses manipulasi file kita bisa gunakan object java.io.File, perlu diperhatikan, object File hanya merupakan reference dari file system, bukan isinya, kita bisa mendapatkan informasi ukuran, direktori/bukan, absolut path, parent direktori, child files, etc, tetapi untuk menangani isi file kita akan menggunakan java.io.InputStream dan java.io.OutputStream.
Bagaimana caranya, langsung saja.
Baca File
  1. //import part  
  2. import java.io.ByteArrayOutputStream;  
  3. import java.io.InputStream;  
  4. import java.io.IOException;  
  5. import java.io.File;  
  6. import java.io.FileInputStream;  
  7. import java.io.FileNotFoundException;  
  8.   
  9.    /** 
  10.     * membaca file ke dalam bentuk byte array 
  11.     */  
  12.     public byte[] bacaFile(String path) throws IOException {  
  13.         ByteArrayOutputStream baos = new ByteArrayOutputStream();  
  14.         InputStream is = null;  
  15.         try {  
  16.             is = new FileInputStream(path);  
  17.             byte[] buffer = new byte[4096]; //buffer untuk proses baca file, bisa disesuaikan  
  18.             int i = -1;  
  19.                         //baca terus selagi masih ada hasil, read(buffer) akan menghasilkan -1, artinya sudah tidak ada yang bisa dibaca atau EOF  
  20.             while( (i = is.read(buffer)) != -1 ) {  
  21.                 //tulis ke baos  
  22.                 baos.write(buffer, 0, i); //tulis dari isi buffer sepanjang i  
  23.             }  
  24.             baos.flush();  
  25.             //karena ByteArrayOutputStream tidak perlu ditutup (lihat Javadoc), jadi tidak masalah  
  26.         } catch(FileNotFoundException ex) {  
  27.             throw new IOException("File \"" + path + "\" tidak ditemukan");  
  28.         } finally {  
  29.             //tutup input stream supaya file dilepas oleh program  
  30.             if(is != null) {  
  31.                 try {  
  32.                     is.close();  
  33.                 } catch(IOException ex) {}  
  34.                 is = null;  
  35.             }  
  36.         }  
  37.         return baos.toByteArray();  
  38.     }  
pendekatan lain, gimana kalau kita mau baca file baris-per-baris? Gampang, prinsipnya tetap sama seperti cara di atas, cuma kita perlu bantuan dua class lagi, java.io.InputStreamReader dan java.io.BufferedReader, langsung aja ..
  1. //import part  
  2. import java.io.BufferedReader;  
  3. import java.io.InputStreamReader;  
  4. import java.io.IOException;  
  5. import java.io.File;  
  6. import java.io.FileInputStream;  
  7. import java.io.FileNotFoundException;  
  8.   
  9.    /** 
  10.     * membaca file baris-per-baris 
  11.     */  
  12.     public void bacaFileBarisPerBaris(String path) throws IOException {  
  13.         BufferedReader reader = null;  
  14.         try {  
  15.                     reader = new BufferedReader(new InputStreamReader(new InputStreamReader(new FileInputStream(path))));  
  16.                     String line = null;  
  17.                     System.out.println("******** isi file:");  
  18.                     while( (line = reader.readLine()) != null ) {  
  19.                          System.out.println(">> " + line);  
  20.                     }  
  21.                     System.out.println("******** akhir isi file");  
  22.         } catch(FileNotFoundException ex) {  
  23.             throw new IOException("File \"" + path + "\" tidak ditemukan");  
  24.         } finally {  
  25.             //tutup reader supaya input stream ditutup dan file dilepas oleh program  
  26.             if(reader != null) {  
  27.                 try {  
  28.                     reader.close();  
  29.                 } catch(IOException ex) {}  
  30.                 reader = null;  
  31.             }  
  32.         }  
  33.     }  
kode di atas akan mencetak isi file ke console:
******** isi file:
(isi file baris per baris)
.....
.....
******** akhir isi file
ada lagi pendekatan lain untuk baca file baris-perbaris, dengan mengombinasikan BufferedReader dan class java.io.FileReader:
  1. //import part  
  2. import java.io.BufferedReader;  
  3. import java.io.FileReader;  
  4. import java.io.IOException;  
  5.   
  6. private void bacaFile(String path) throws IOException{  
  7.         BufferedReader reader = null;  
  8.         try {  
  9.             reader = new BufferedReader(new FileReader(path));  
  10.             String line = null;  
  11.             while( (line = reader.readLine()) != null ) {  
  12.                 System.out.println(">> " + line);  
  13.             }  
  14.         } finally {  
  15.             if(reader != null) {  
  16.                 try {  
  17.                     reader.close();  
  18.                 } catch(IOException ex) {}  
  19.                 reader = null;  
  20.             }  
  21.         }  
  22.     }  
Tulis File
Menggunakan class java.io.FileOutputStream (gampang kan, cuma lawannya dari FileInputStream :D ), lihat contoh baca file paling pertama, polanya mirip.
  1. //import part  
  2. import java.io.ByteArrayOutputStream;  
  3. import java.io.FileOutputStream;  
  4. import java.io.IOException;  
  5.   
  6. private void tulisFile(byte[] bytes, String path) throws IOException {  
  7.         ByteArrayInputStream bais = null;  
  8.         FileOutputStream fos = null;  
  9.         try {  
  10.             bais = new ByteArrayInputStream(bytes);  
  11.             fos = new FileOutputStream(path);  
  12.             byte[] buffer = new byte[4096]; //buffer buat tulis  
  13.             int i = -1;  
  14.             while( (i = bais.read(buffer)) != -1 ) {  
  15.                 fos.write(buffer, 0, i);  
  16.             }  
  17.             fos.flush();  
  18.         } finally {  
  19.             if(bais != null) {  
  20.                 try {  
  21.                     bais.close();  
  22.                 } catch(IOException ex) {}  
  23.                 bais = null;  
  24.             }  
  25.             if(fos != null) {  
  26.                 try {  
  27.                     fos.close();  
  28.                 } catch(IOException ex) {}  
  29.                 fos = null;  
  30.             }  
  31.         }  
  32.     }  
Kira-kira begitu lah untuk cara baca-tulis file di java, cuma yang perlu jadi catatan, cara di atas sebisa mungkin hanya dipergunakan untuk ukuran file yang relatif nggak terlalu besar, kalau file yang dibaca sangat besar kita harus pergunakan java.io.RandomAccessFile supaya lebih cepat dan aman (kemungkinan program hang), akan gw bahas kapan-kapan.

Post a Comment