Archive

Archive for the ‘Eksplorasi’ Category

[Java] Mengenal kelas RandomAccessFile

Pada kesempatan kali ini, saya akan membahas tentang kelas RandomAccessFile pada java.

T: Kok tiba-tiba bahas kelas ini sih?
J: Oh gara-gara tugas sister nih, bos Haqi ngasih kelas yang pake RandomAccessFile-nya

Oke kembali ke topik. Jadi, apa itu kelas RandomAcessFile?

Kelas RandomAccessFile merupakan kelas yang berfungsi untuk mengakses file eksternal secara bebas, bebas disini maksudnya kita tidak perlu membaca keseluruhan untuk mendapatkan/mengubah informasi yang terletak pada posisi tertentu dalam sebuah file. Dengan RandomAccessFile, kita langsung dapat mengakses data pada posisi tertentu yang kita inginkan di dalam file. RandomAccessFile biasanya digunakan karena kecepatan aksesnya.

Bagaimana cara kerja kelas RandomAccessFile?

Kelas RandomAccessFile bekerja seperti merubah sebuah file menjadi sekumpulan array of byte, yang mana didalam kelas ini juga terdapat pointer yang berfungsi untuk menunjukkan posisi byte yang akan diubah atau diambil nilainya.

Kita dapat mengetahui dimana pointer berada dengan method getFilePointer, sedangkan untuk men-set posisi pointer pada suatu posisi digunakan method seek. Untuk dapat membaca byte dari file eksternal pada posisi dimana pointer berada, kita bisa menggunakan method read, sedangkan untuk menulis ke file eksternal, gunakan method write.

Yang penting, ingat-ingat empat method ajaib kelas RandomAccessFile, yaitu :

getFilePointer
seek
read
write

Untuk lebih jelasnya, kita dapat melihat kode program sederhana dibawah ini :

package cobacobacode;

import java.io.RandomAccessFile;

public class Main {
 public static void main(String[] args) throws Exception {
 // membuat objek raf dengan kelas RandomAccessFile dengan file "contoh.txt"
 RandomAccessFile raf = new RandomAccessFile("G:\\TEMPORARY FILES\\contoh.txt", "rw");
 byte b;
 byte[] content = new byte[(int)raf.length()];

 // mencetak posisi awal pointer
 System.out.println("Posisi pointer awal : "+raf.getFilePointer());

 // mengubah posisi pointer ke nilai 5
 raf.seek(5);
 System.out.println("\nMenjalankan fungsi \"seek(5)\"");
 System.out.println("Posisi pointer setelah proses : "+raf.getFilePointer());

 // membaca karakter yang terdapat pada posisi pointer sekarang
 b = (byte)raf.read();
 System.out.println("\nMenjalankan fungsi \"read()\"");
 System.out.println("Karakter yang terbaca : "+(char)b);
 System.out.println("Posisi pointer setelah proses : "+raf.getFilePointer());

 // merubah karakter pada file eksternal yang terdapat pada posisi pointer sekarang
 raf.write('x');
 System.out.println("\nMenjalankan fungsi \"write('x')\"");
 System.out.println("Posisi pointer setelah proses : "+raf.getFilePointer());

 // membaca seluruh isi file
 raf.seek(0);
 raf.read(content);
 System.out.println("\nMenjalankan fungsi \"read(content)\"");
 System.out.println("String yang terbaca : "+new String(content));
 System.out.println("Posisi pointer setelah proses : "+raf.getFilePointer());
 }
}

Isi file “contoh.txt” sebelum program dijalankan adalah sebagai berikut :

abcdefghijklmnopqrstuvwxyz0123456789

Sedangkan isi file setelah eksekusi program adalah :

abcdefxhijklmnopqrstuvwxyz0123456789

Di bagian console, outputnya adalah sebagai berikut :

Posisi pointer awal : 0

Menjalankan fungsi "seek(5)"
Posisi pointer setelah proses : 5

Menjalankan fungsi "read()"
Karakter yang terbaca : f
Posisi pointer setelah proses : 6

Menjalankan fungsi "write('x')"
Posisi pointer setelah proses : 7

Menjalankan fungsi "read(content)"
String yang terbaca : abcdefxhijklmnopqrstuvwxyz0123456789
Posisi pointer setelah proses : 36

Bisa dilihat dari eksekusi program diatas, kelas RandomAccessFile dapat mengubah isi dari eksternal file pada posisi manapun yang ditunjuk oleh pointer. Perubahan terjadi pada huruf “f” yang berganti menjadi huruf “x” akibat proses write. Perubahan yang dilakukan adalah menimpa byte yang lama, bukan menyisipkan.

Selain itu, dapat dilihat pula bahwa setelah proses read maupun write, pointer bergeser sebanyak jumlah data yang dibaca. Pada hal diatas, saat pembacaan byte karakter, pointer bergeser sebanyak satu satuan. Sedangkan di akhir program saat pembacaan seluruh isi file, pointer bergeser ke posisi akhir karena karakter yang dibaca adalah seluruh file.

Sekian dulu penjelasan dari saya pada pembahasan kali ini. Apabila terdapat kesalahan yang perlu diperbaiki ataupun kekurangan yang perlu ditambahkan, bisa langsung komentar di post ini. Untuk lebih lengkapnya, bisa lihat langsung ke website resmi java dari Oracle disini.

Terima kasih atas perhatiannya. :)

Referensi : http://download.oracle.com/javase/1.5.0/docs/api/java/io/RandomAccessFile.html

Categories: Eksplorasi