Java Programming‎ > ‎Java I/O‎ > ‎

03. Membaca File dari Posisi Tertentu - Non Sekuensial

posted Sep 25, 2011, 9:01 PM by Editor KursusInternet.com   [ updated Sep 26, 2011, 12:16 AM ]

Pendahuluan

Kita dapat membaca ataupun menulis file teks dan binary berdasarkan posisi tertentu dengan menggunakan class RandomAccessFile. Constructor dari class ini membutuhkan argumen nama file dan modus I/O.

Modus I/O yang didukung terdiri dari pilihan berikut :
  • r : membuka file (read)  untuk dibaca saja.
  • rw  : membuka file untuk pembacaan dan penulisan (read-write) file. Jika file belum ada, maka akan dibuat.
  • rws : seperti rw tetapi melakukan sinkronisasi atau update data maupun metadata setiap kali terjadi penulisan. Dengan demikian performanya lebih lambat.
  • rwd : seperti rw tetapi melakukan sinkronisasi atau update data setiap kali terjadi penulisan. Untuk metadata dapat dilakukan secara batch.
Contoh deklarasi dan inisialisasi objek dari class RandomAccessFile adalah sebagai berikut :

  RandomAccessFile fileInput = new RandomAccessFile("C:/contohfile.txt""r");

Untuk melakukan pembacaan, maka kita gunakan method seek() dan read() serta berbagai variasi yang berawalan read lainnya seperti readBoolean(), readChar(), readDouble(), readByte(), dan lain-lain. Untuk daftar method yang bisa digunakan selengkapnya bisa baca dokumentasinya disini.

Contoh Penggunaan

Misalkan kita ingin membaca suatu text file dengan isi sebagai berikut :

contohfile.txt

IniadalahheaderyangtidakperluEntri01Isi01Entri02Isi02Entri03Isi03

Dan kita ingin mengambil teks dari file tersebut dengan urutan sebagai berikut :
  • Pertama, kita akan mengambil dari posisi 42 sepanjang 12 karakter. Kita akan mendapatkan teks "Entri02Isi02".
  • Selanjutnya, kita akan mundur untuk mengambil dari posisi kolom 30 sepanjang 12 karakter, yang akan mendapatkan  teks "Entri01Isi01".

Potongan program berikut akan melakukan hal tersebut. Contoh file dapat di-download pada bagian akhir artikel ini.

package com.kursusinternet.io;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

public class BacaRandomAccess {
  public static void main(String[] args) {
    try {
      RandomAccessFile fileInput = new RandomAccessFile("C:/contohfile.txt""r");
      //Ambil posisi di 42, 
      //karena index dimulai dari 0 maka kita masukkan 41
      int offset = 41;
      int panjang = 12;
      
      byte[] hasilPembacaan = new byte[panjang];
      fileInput.seek(offset);
      fileInput.read(hasilPembacaan, 0, panjang);
      
      //Mencetak Hasilnya
      for(int i=0; i<panjang; i++System.out.print((charhasilPembacaan[i]);
      System.out.println("");

      //Mundur ke posisi 30
      offset = 29;
      fileInput.seek(offset);
      fileInput.read(hasilPembacaan, 0, panjang);
      
      //Mencetak Hasilnya
      for(int i=0; i<panjang; i++System.out.print((charhasilPembacaan[i]);

    catch (FileNotFoundException e) {
      System.err.println("File tidak ditemukan !");
      e.printStackTrace();
    }
    catch (IOException e) {
      System.err.println("I/O Exception !");
      e.printStackTrace();
    }

  }
}

Hasil Eksekusi


Gambar. Hasil eksekusi program seperti terlihat pada console Eclipse

ċ
contohfile.txt
(0k)
Editor KursusInternet.com,
Sep 25, 2011, 11:30 PM
Comments