๐ File I/O (Input dan Output File) dalam Java¶
Java menyediakan API yang kuat untuk File Input/Output (I/O), memungkinkan program untuk membaca dan menulis data ke file, baik dalam format teks maupun biner. Bagian ini berfokus pada operasi I/O untuk file teks menggunakan kelas seperti FileReader, BufferedReader, FileWriter, dan BufferedWriter, serta pengelolaan file dan folder dengan kelas File.
Tujuan File I/O¶
- Membaca Data: Mengambil konten dari file untuk diproses.
- Menulis Data: Menyimpan hasil program ke file untuk penyimpanan permanen.
- Mengelola File/Folder: Memeriksa keberadaan file atau membuat direktori.
๐ฅ Membaca File Teks¶
Untuk membaca file teks, gunakan BufferedReader bersama FileReader untuk efisiensi, karena BufferedReader membaca data per baris dengan buffer, mengurangi akses langsung ke disk.
Contoh dengan BufferedReader (Menggunakan Try-with-Resources):¶
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BacaFileDemo {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"))) {
String baris;
while ((baris = reader.readLine()) != null) {
System.out.println(baris);
}
} catch (IOException e) {
System.out.println("Gagal membaca file: " + e.getMessage());
}
}
}
๐จ๏ธ Output (jika data.txt berisi):
Ali
Budi
Cici
๐ก Tips: Gunakan try-with-resources untuk memastikan file ditutup secara otomatis, mengurangi risiko kebocoran sumber daya.
๐ Menulis ke File Teks¶
Untuk menulis ke file teks, gunakan BufferedWriter bersama FileWriter untuk efisiensi dan kemudahan menulis data per baris.
Contoh dengan BufferedWriter:¶
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class TulisFileDemo {
public static void main(String[] args) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
writer.write("Data panen berhasil dicatat.");
writer.newLine();
writer.write("Total berat: 1234 kg");
System.out.println("Berhasil menulis file.");
} catch (IOException e) {
System.out.println("Gagal menulis file: " + e.getMessage());
}
}
}
๐จ๏ธ Output (di konsol):
Berhasil menulis file.
Isi file output.txt:
Data panen berhasil dicatat.
Total berat: 1234 kg
๐ Menambahkan Data ke File (Append)¶
Untuk menambahkan data tanpa menimpa isi file yang ada, gunakan parameter true pada konstruktor FileWriter.
Contoh Append:¶
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class AppendFileDemo {
public static void main(String[] args) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter("log.txt", true))) {
writer.write("Tambahan data: 2025-07-15");
writer.newLine();
System.out.println("Berhasil menambahkan data ke file.");
} catch (IOException e) {
System.out.println("Gagal menambahkan data: " + e.getMessage());
}
}
}
๐จ๏ธ Output (di konsol):
Berhasil menambahkan data ke file.
๐ Catatan: Parameter
truepadaFileWritermengaktifkan mode append. Tanpa parameter ini, file akan ditimpa.
๐ Memeriksa Keberadaan File¶
Kelas File digunakan untuk mengelola informasi file dan folder, seperti memeriksa keberadaan file.
Contoh:¶
import java.io.File;
public class CekFileDemo {
public static void main(String[] args) {
File file = new File("data.txt");
if (file.exists()) {
System.out.println("File ditemukan: " + file.getAbsolutePath());
} else {
System.out.println("File tidak ada.");
}
}
}
๐จ๏ธ Output (jika file ada):
File ditemukan: /path/to/data.txt
๐ Membuat Folder¶
Kelas File juga dapat digunakan untuk membuat direktori baru.
Contoh:¶
import java.io.File;
public class BuatFolderDemo {
public static void main(String[] args) {
File folder = new File("rekap");
if (!folder.exists()) {
if (folder.mkdir()) {
System.out.println("Folder 'rekap' berhasil dibuat.");
} else {
System.out.println("Gagal membuat folder.");
}
} else {
System.out.println("Folder sudah ada.");
}
}
}
๐จ๏ธ Output (jika folder belum ada):
Folder 'rekap' berhasil dibuat.
โ ๏ธ Exception Umum dalam File I/O¶
Operasi File I/O sering kali memicu exception yang perlu ditangani:
| Exception | Penyebab |
|---|---|
FileNotFoundException |
File tidak ditemukan atau tidak dapat diakses. |
IOException |
Error umum I/O, seperti masalah izin atau kegagalan perangkat. |
๐ก Tips: Selalu tangani exception dengan try-catch dan gunakan try-with-resources untuk menutup sumber daya secara otomatis.
๐งช Studi Kasus: Menyimpan Daftar Pekerja ke File¶
Berikut adalah contoh penggunaan File I/O untuk menyimpan daftar nama pekerja ke file teks dan membacanya kembali.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class PekerjaFileDemo {
public static void main(String[] args) {
// Menulis daftar pekerja ke file
try (BufferedWriter writer = new BufferedWriter(new FileWriter("pekerja.txt"))) {
writer.write("Ali");
writer.newLine();
writer.write("Budi");
writer.newLine();
writer.write("Cici");
writer.newLine();
System.out.println("Data pekerja berhasil disimpan.");
} catch (IOException e) {
System.out.println("Gagal menyimpan: " + e.getMessage());
}
// Membaca daftar pekerja dari file
try (BufferedReader reader = new BufferedReader(new FileReader("pekerja.txt"))) {
System.out.println("Daftar pekerja:");
String baris;
int nomor = 1;
while ((baris = reader.readLine()) != null) {
System.out.printf("%d. %s%n", nomor++, baris);
}
} catch (IOException e) {
System.out.println("Gagal membaca: " + e.getMessage());
}
}
}
๐จ๏ธ Output:
Data pekerja berhasil disimpan.
Daftar pekerja:
1. Ali
2. Budi
3. Cici
Isi file pekerja.txt:
Ali
Budi
Cici
๐ Kesimpulan¶
File I/O adalah alat penting untuk menyimpan dan mengambil data dari file:
| Konsep | Penjelasan |
|---|---|
FileReader |
Membaca karakter demi karakter dari file. |
BufferedReader |
Membaca per baris dengan buffer untuk efisiensi. |
FileWriter |
Menulis karakter demi karakter ke file. |
BufferedWriter |
Menulis dengan buffer untuk efisiensi. |
File |
Mengelola file dan folder (misalnya, cek keberadaan, buat folder). |
๐ฏ Tujuan Utama: File I/O memungkinkan program untuk berinteraksi dengan sistem file, menyimpan data secara permanen, dan mengambil data untuk pemrosesan.
๐ Langkah Selanjutnya¶
Pelajari lebih lanjut tentang Enum (Konstanta Bertipe Kelas) untuk memahami cara mendefinisikan konstanta dengan tipe data khusus di Java.
โฌ ๏ธ Kembali: HashMap dalam Java