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 |
|
OutputStream |
|
FileInputStream |
|
FileOutputStream |
|
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!
- Buat program yang membaca
nilai.txt. - Hitung nilai akhirnya.
- Alih-alih menampilkannya di layar, tulis hasilnya ke file baru bernama
laporan_nilai.txt.
