Episode ini membahas I/O dan file di Java: dasar java.io dan java.nio, membaca dan menulis file teks, binary, dan CSV, Path API dan Files utility, working directory, serta praktik terbaik resource management dengan try-with-resources.

Hampir setiap aplikasi berinteraksi dengan file: membaca konfigurasi, menulis log, mengimpor data, atau mengekspor laporan. Episode 8 membahas input/output dan pengelolaan file di Java — dari API klasik java.io hingga java.nio modern. Kalian akan belajar membaca dan menulis file teks, binary, dan CSV, serta menerapkan praktik terbaik resource management.
java.io adalah API klasik berbasis stream: FileInputStream, FileOutputStream, FileReader, dan FileWriter. java.nio (diperkenalkan Java 7) menawarkan API yang lebih modern dan fleksibel: Path, Files, channel, dan buffer. Untuk kebutuhan sehari-hari, java.nio.file.Files adalah titik masuk yang ringkas.
Baca seluruh isi file teks dalam satu baris kode:
import java.nio.file.*;
public class BacaTeks {
public static void main(String[] args) throws IOException {
String isi = Files.readString(Path.of("catatan.txt"));
System.out.println(isi);
}
}Files.readString(Path.of("catatan.txt")) membaca seluruh file menjadi satu string. Untuk file besar, gunakan readAllLines atau stream.
Gunakan Files.writeString untuk menulis teks, atau Files.write untuk daftar baris:
import java.nio.file.*;
import java.util.List;
public class TulisTeks {
public static void main(String[] args) throws IOException {
Files.writeString(Path.of("output.txt"), "Halo Java");
Files.write(Path.of("baris.txt"), List.of("Baris 1", "Baris 2"));
}
}Untuk memproses file besar secara efisien, baca per baris:
import java.io.*;
import java.nio.file.*;
public class BacaBaris {
public static void main(String[] args) throws IOException {
try (BufferedReader reader = Files.newBufferedReader(Path.of("log.txt"))) {
String baris;
while ((baris = reader.readLine()) != null) {
System.out.println(baris);
}
}
}
}File binary seperti gambar, audio, dan arsip tidak bisa dibaca sebagai teks. Gunakan stream byte dengan Files.copy untuk menyalin, atau Files.readAllBytes untuk memprosesnya:
import java.nio.file.*;
public class SalinBinary {
public static void main(String[] args) throws IOException {
Path sumber = Path.of("gambar.png");
Path tujuan = Path.of("gambar-copy.png");
Files.copy(sumber, tujuan, StandardCopyOption.REPLACE_EXISTING);
}
}Files.copy dengan opsi REPLACE_EXISTING menyalin file binary dan menimpa tujuan jika sudah ada.
CSV (Comma-Separated Values) adalah format teks dengan nilai dipisahkan koma. Baca per baris dan pecah dengan split:
import java.io.*;
import java.nio.file.*;
public class BacaCsv {
public static void main(String[] args) throws IOException {
try (BufferedReader reader = Files.newBufferedReader(Path.of("produk.csv"))) {
String baris;
while ((baris = reader.readLine()) != null) {
String[] kolom = baris.split(",");
System.out.println(kolom[0] + " - " + kolom[1]);
}
}
}
}Menulis CSV cukup dengan menyusun string per baris:
List<String> baris = List.of("1,Java,50000", "2,Python,45000");
Files.write(Path.of("produk.csv"), baris);Untuk CSV yang kompleks, pertimbangkan library seperti OpenCSV.
java.nio.file menyediakan berbagai operasi file:
import java.nio.file.*;
public class OperasiFile {
public static void main(String[] args) throws IOException {
Path dir = Path.of("backup");
Files.createDirectories(dir);
Files.move(Path.of("a.txt"), Path.of("b.txt"));
Files.deleteIfExists(Path.of("sementara.txt"));
}
}Working directory adalah direktori tempat proses dijalankan — titik awal untuk path relatif:
pwdPath relatif seperti Path.of("data.txt") selalu diinterpretasikan relatif terhadap working directory.
Aturan emas: setiap resource yang dibuka wajib ditutup. Try-with-resources menangani ini secara otomatis dan aman terhadap exception:
try (BufferedReader reader = Files.newBufferedReader(Path.of("input.txt"));
BufferedWriter writer = Files.newBufferedWriter(Path.of("output.txt"))) {
String baris;
while ((baris = reader.readLine()) != null) {
writer.write(baris.toUpperCase());
writer.newLine();
}
}Episode 8 mengajarkan I/O dan pengelolaan file: membedakan java.io dan java.nio, membaca dan menulis file teks, binary, dan CSV, memanfaatkan Path API dan Files utility, memahami working directory, serta menerapkan try-with-resources untuk resource management.
Inti yang harus dibawa pulang:
java.nio.file.Files adalah titik masuk I/O modern yang ringkas.readString atau readAllLines.Files.copy atau readAllBytes.split(",").Di episode 9 selanjutnya kita akan membahas data binding dan JSON processing — proses serialisasi dan deserialisasi JSON di Java, library populer Jackson, Gson, dan JSON-B, mapping objek Java ke JSON dan sebaliknya, serta validasi data input dan error handling saat parsing. Saatnya berbicara dengan dunia luar!