Operasi Teks Java: Baca Tulis File dengan FileReader & FileWriter

Pada materi sebelumnya tentang Stream, kita bekerja dengan data yang berorientasi pada byte. Namun, bagaimana jika kita ingin memproses data berupa teks atau karakter? Jika menggunakan byte stream, kita perlu melakukan type casting manual untuk mengubah byte menjadi karakter, yang tentu merepotkan.

Untuk mengatasi hal ini, Java menyediakan kelas Reader dan Writer. Kelas-kelas ini dirancang khusus untuk menangani operasi berkas teks, sehingga Anda tidak perlu lagi melakukan pengkonversian tipe data secara manual.

Perbedaan Byte Stream dan Character Stream

Secara sederhana, jika InputStream dan OutputStream adalah untuk data mentah (byte), maka Reader dan Writer adalah untuk data teks (karakter). Berikut adalah padanan kelas-kelasnya:

Byte Stream (Data Mentah)Character Stream (Data Teks)
InputStream

 

Reader

 

 

OutputStream

 

Writer

 

 

FileInputStream

 

FileReader

 

 

FileOutputStream

 

FileWriter

Membaca File Teks dengan FileReader

FileReader adalah kelas yang digunakan untuk membuka dan membaca sebuah berkas berbasis karakter. Agar pembacaan lebih efisien (misalnya membaca per baris), FileReader sering dikombinasikan dengan BufferedReader.

Studi Kasus: Menghitung Nilai Mahasiswa

Misalkan kita memiliki file nilai.txt yang berisi data nilai mentah dengan format posisi karakter tertentu (fixed-width).

Isi file nilai.txt:

0800700700
0900760870
...

Kode Program:

import java.io.*;

class HitungNilai {
    public static void main(String args[]) {
        String str;
        int tgs, uts, uas;
        double nilai;
        
        try {
            // Membuka file nilai.txt
            FileReader fr = new FileReader("D:/data/nilai.txt"); 
            BufferedReader br = new BufferedReader(fr); 
            
            // Membaca baris demi baris
            while ((str = br.readLine()) != null) { 
                // Mengambil potongan string (parsing) berdasarkan posisi karakter
                tgs = Integer.parseInt(str.substring(1, 3)); 
                uts = Integer.parseInt(str.substring(4, 6)); 
                uas = Integer.parseInt(str.substring(7, 9)); 
                
                // Menghitung Nilai Akhir
                nilai = (20 * tgs + 30 * uts + 50 * uas) / 100.0; 
                
                System.out.printf("tugas %d uts %d uas %d nilai %.2f\n", tgs, uts, uas, nilai); 
            }
            br.close(); 
} catch (IOException e) { System.err.println("File read error"); } } }

Program di atas membaca teks, memotong string (substring) untuk mendapatkan angka Tugas, UTS, dan UAS, lalu menghitung rata-ratanya secara otomatis.

Menulis File Teks dengan FileWriter

FileWriter adalah kelas yang digunakan untuk menciptakan atau menulis ke suatu berkas berbasis karakter. Sama seperti saat membaca, kita bisa menggunakan BufferedWriter untuk performa penulisan yang lebih baik.

Contoh Program Menulis File

Berikut adalah cara membuat file CobaFile.txt dan mengisinya dengan beberapa baris teks.

import java.io.*;

class TulisFile2 {
    public static void main(String args[]) {
        try {
            // Membuat file baru di lokasi tujuan
            FileWriter fw = new FileWriter("D:/Data/CobaFile.txt"); 
            BufferedWriter bw = new BufferedWriter(fw); 
            
            // Menulis teks ke dalam file
            bw.write("baris kesatu" + "\n"); 
            bw.write("baris kedua" + "\n"); 
            bw.write("baris ketiga" + "\n"); 
            
            bw.close(); // Jangan lupa menutup stream! 
        } catch (IOException e) {
            System.err.println("Kesalahan pada penulisan text ke File"); 
        }
    }
}

Setelah dijalankan, file CobaFile.txt akan berisi teks yang Anda tuliskan.

Kesimpulan

Menggunakan kelas FileReader dan FileWriter (beserta BufferedReader dan BufferedWriter) adalah cara standar dan efisien di Java untuk menangani file teks. Anda tidak perlu memikirkan konversi byte-ke-karakter karena Java menanganinya secara otomatis, membuat kode Anda lebih bersih dan mudah dibaca.

Tantangan: Gabungkan kedua program di atas!

  1. Buat program yang membaca nilai.txt.
  2. Hitung nilai akhirnya.
  3. Alih-alih menampilkannya di layar, tulis hasilnya ke file baru bernama laporan_nilai.txt.