前回はToDoリスト管理アプリを作り、これまでの学習内容を総動員しました。
今回は、プログラムを終了してもデータが残るように、テキストファイルへの書き込みと読み込みを行う「ファイル入出力」について解説します。 ファイル入出力を覚えることで、データを永続的に保存・再利用できるプログラムが作れるようになります。
ファイル入出力の基本
これまで作ってきたプログラムは、変数やArrayListにデータを保存していたため、プログラムを終了するとデータが消えてしまいます。実際のアプリでは、データをファイルやデータベースに保存して、次回起動時にも使えるようにする必要があります。
Javaでテキストファイルを扱うには、FileWriter と BufferedWriter(書き込み)、FileReader と BufferedReader(読み込み)を使います。これらを使うには以下のインポートが必要です。
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
ファイル操作では、ファイルが見つからない、書き込み権限がないなど、さまざまなエラーが発生する可能性があります。そのため、前回学んだ例外処理(try-catch)が必ず必要になります。
サンプルコード(ファイルへの書き込み)
ファイル作成
「Java05」フォルダに FileWriteTest.java という名前でファイルを作成します

コード入力
以下のコードを入力します。
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;
public class FileWriteTest {
public static void main(String[] args) {
try {
FileWriter fw = new FileWriter("todo.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write("買い物");
bw.newLine();
bw.write("勉強");
bw.newLine();
bw.write("運動");
bw.newLine();
bw.close();
System.out.println("ファイルに書き込みました");
} catch (IOException e) {
System.out.println("エラー:ファイルの書き込みに失敗しました");
}
}
}

コンパイル
javac FileWriteTest.java

実行
java FileWriteTest
実行結果は次のようになります。
ファイルに書き込みました

実行後、「Java05」フォルダに todo.txt というファイルが作成され、中身は次のようになっています。
買い物
勉強
運動

サンプルコード(ファイルからの読み込み)
ファイル作成
「Java05」フォルダに FileReadTest.java という名前でファイルを作成します

コード入力
以下のコードを入力します。
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
public class FileReadTest {
public static void main(String[] args) {
try {
FileReader fr = new FileReader("todo.txt");
BufferedReader br = new BufferedReader(fr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
} catch (IOException e) {
System.out.println("エラー:ファイルの読み込みに失敗しました");
}
}
}

コンパイル
javac FileReadTest.java

実行
java FileReadTest
実行結果は次のようになります。
買い物
勉強
運動

コードの解説
書き込みの処理では、FileWriter("todo.txt") でファイルを開き(ファイルが存在しない場合は新規作成)、BufferedWriter に渡しています。bw.write("買い物") で文字列を書き込み、bw.newLine() で改行を挿入します。処理が終わったら bw.close() でファイルを閉じます。ファイルを閉じ忘れると、データが正しく保存されなかったり、他のプログラムからファイルにアクセスできなくなったりするため、必ず close() を呼ぶようにしましょう。
FileWriter の第2引数に true を渡すと「追記モード」になります。
FileWriter fw = new FileWriter("todo.txt", true);
これにより、既存のファイルの末尾に内容を追加することができます。true を渡さない場合は上書きモードとなり、ファイルの内容が毎回最初から書き直されます。
読み込みの処理では、FileReader("todo.txt") で todo.txt を開き、BufferedReader に渡しています。br.readLine() は1行ずつ文字列として読み込み、ファイルの終端に達すると null を返します。while ((line = br.readLine()) != null) とすることで、ファイルの最後まで1行ずつ繰り返し読み込むことができます。
ファイル操作には必ず IOException が伴うため、try-catchで囲むことが必須です。IOException は入出力に関するエラーをまとめて扱う例外クラスで、ファイルが見つからない・読み書き権限がないなどのエラーをキャッチします。
まとめ
ファイルへの書き込みには FileWriter と BufferedWriter、読み込みには FileReader と BufferedReader を使います。書き込みでは write() と newLine() で内容を追加し、追記モードには FileWriter の第2引数に true を渡します。読み込みでは readLine() で1行ずつ取得し、null になったらファイルの終端です。どちらの処理も close() を忘れずに行い、IOException を try-catch で必ずキャッチするようにしましょう。ファイル入出力を覚えることで、プログラムを終了してもデータが残る、より実用的なアプリが作れるようになります。
2026/06/24(水) ぱんまる


コメント