File & Input/Output (java.nio.file)
Membaca dan menulis berkas teks dengan Files, Path, dan try-with-resources; menangani IOException dan membaca input pengguna.
Konsep: Path dan Files
Aplikasi nyata harus menyimpan data ke berkas supaya tidak hilang saat program ditutup. Java modern memakai dua class di paket java.nio.file:
- Path — alamat sebuah berkas atau folder, dibuat dengan
Path.of("data/tugas.txt"). - Files — kumpulan method statis untuk membaca, menulis, menyalin, dan menghapus.
Menulis dan membaca teks (cara tercepat)
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
Path berkas = Path.of("catatan.txt");
Files.writeString(berkas, "Baris pertama\nBaris kedua\n"); // menimpa isi lama
String isi = Files.readString(berkas); // seluruh isi sebagai String
List<String> baris = Files.readAllLines(berkas); // satu elemen per baris
Semua method ini bisa melempar IOException (berkas tak ada, tidak punya izin, dan sebagainya), sehingga wajib ditangani dengan try-catch atau dideklarasikan lewat throws.
Menangani IOException
try {
String isi = Files.readString(Path.of("tidak-ada.txt"));
System.out.println(isi);
} catch (IOException e) {
System.out.println("Gagal membaca berkas: " + e.getMessage());
}
Menambah isi di akhir berkas
import java.nio.file.StandardOpenOption;
Files.writeString(berkas, "Baris baru\n",
StandardOpenOption.CREATE, StandardOpenOption.APPEND);
CREATE membuat berkas jika belum ada, APPEND menambahkan di akhir tanpa menghapus isi lama.
Berkas besar: baca baris per baris
readAllLines memuat semuanya ke memori. Untuk berkas besar gunakan BufferedReader bersama try-with-resources agar berkas otomatis ditutup:
import java.io.BufferedReader;
try (BufferedReader pembaca = Files.newBufferedReader(berkas)) {
String baris;
while ((baris = pembaca.readLine()) != null) {
System.out.println(baris);
}
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
}
Memeriksa dan mengelola berkas
| Method | Fungsi |
|---|---|
Files.exists(path) | Apakah berkas/folder ada? |
Files.createDirectories(path) | Buat folder (termasuk folder induk) |
Files.copy(a, b) | Salin berkas |
Files.delete(path) | Hapus (error jika tak ada) |
Files.deleteIfExists(path) | Hapus jika ada |
Files.size(path) | Ukuran dalam byte |
Files.list(folder) | Daftar isi folder (tutup dengan try-with-resources) |
Mengolah isi berkas dengan Stream
long jumlahBaris = Files.readAllLines(berkas).stream()
.filter(b -> !b.isBlank())
.count();
Membaca input dari keyboard
import java.util.Scanner;
Scanner in = new Scanner(System.in);
System.out.print("Nama: ");
String nama = in.nextLine();
System.out.print("Umur: ");
int umur = Integer.parseInt(in.nextLine()); // lebih aman daripada nextInt()
Memakai nextLine() lalu parseInt menghindari jebakan: nextInt() meninggalkan karakter Enter di buffer sehingga nextLine() berikutnya terbaca kosong.
Format sederhana: satu baris satu data
Cara mudah menyimpan objek: tulis tiap objek sebagai satu baris dengan pemisah (misalnya |), dan saat membaca pecah dengan split:
String baris = "1|Belajar Java|false";
String[] bagian = baris.split("\\|"); // tanda | perlu di-escape di regex
int id = Integer.parseInt(bagian[0]);
String judul = bagian[1];
boolean selesai = Boolean.parseBoolean(bagian[2]);
Error umum
NoSuchFileException→ path salah atau folder belum dibuat. Path relatif dihitung dari folder tempat program dijalankan.unreported exception IOException; must be caught or declared→ lupa try-catch atauthrows IOException.ArrayIndexOutOfBoundsExceptionsaatsplit→ baris tidak punya jumlah kolom yang diharapkan; periksabagian.length.