File & Input/Output (java.nio.file)

Membaca dan menulis berkas teks dengan Files, Path, dan try-with-resources; menangani IOException dan membaca input pengguna.

Part 14 dari 17 ± 50 menit Gratis

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

MethodFungsi
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 atau throws IOException.
  • ArrayIndexOutOfBoundsException saat split → baris tidak punya jumlah kolom yang diharapkan; periksa bagian.length.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X