ファイル操作: 読み書き

Reader/Writer でテキスト、Stream でバイナリ。

Reader
テキスト読み込み。
Writer
テキスト書き込み。
Stream
バイナリ入出力。
Mailbox

ファイルは「郵便ポスト」。 **読み込み** = ポストから手紙を取り出す **書き込み** = ポストに手紙を入れる 使ったら必ず**鍵を閉める**(close)。

ファイル操作

Read, Write, Append
import java.io.*;
// ファイル読み込み
try (BufferedReader reader = new BufferedReader(
new FileReader("input.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
// ファイル書き込み
try (BufferedWriter writer = new BufferedWriter(
new FileWriter("output.txt"))) {
writer.write("Hello World");
writer.newLine();
writer.write("Second line");
}
// 追記モード
try (FileWriter fw = new FileWriter("log.txt", true)) {
fw.write("Appended text\n");
}
実行結果
Hello World\nSecond line
Bad
// ❌ Bad: リソースを閉じ忘れ
FileReader reader = new FileReader("file.txt");
// ... 使用
// reader.close() を忘れた!
Good
// ✅ Good: try-with-resources
try (FileReader reader = new FileReader("f")) {
// ...
} // 自動で close

パターン

Scanner, Binary, Files
// Scanner でファイル読み込み
try (Scanner scanner = new Scanner(new File("data.txt"))) {
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(line);
}
}
// PrintWriter で書き込み
try (PrintWriter writer = new PrintWriter("output.txt")) {
writer.println("Line 1");
writer.printf("Number: %d%n", 42);
}
// バイナリファイル
try (DataOutputStream dos = new DataOutputStream(
new FileOutputStream("data.bin"))) {
dos.writeInt(42);
dos.writeDouble(3.14);
dos.writeUTF("Hello");
}
// オブジェクトのシリアライズ
try (ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("object.bin"))) {
oos.writeObject(myObject);
}
// Files (java.nio) - より簡潔
List<String> lines = Files.readAllLines(Path.of("file.txt"));
Files.write(Path.of("out.txt"), lines);
Tip: 新規開発では Files (NIO) を使う。

合格ライン

ファイルを読み書きできる
try-with-resources を使っている

参考リンク

演習課題

課題1: ファイル読み込み
BufferedReader でテキストファイルを読み込んでください。
課題2: ファイル書き込み
try-with-resources でファイルに書き込んでください。

次のステップ