Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
Files.readString() / Files.readAllLines()
ファイルの内容を文字列または行のリストとして一度に読み込むメソッドです(Java 11+)。Files クラスのユーティリティメソッドを使うことで、従来の BufferedReader よりも少ないコードで読み込みが完結します。
構文
// ファイル全体を文字列として読み込みます(Java 11+)。
String content = Files.readString(Path.of("ファイルパス"));
// ファイルの全行をリストとして読み込みます。
List<String> lines = Files.readAllLines(Path.of("ファイルパス"));
// ファイルの全行をストリームとして読み込みます(Java 8+)。
Stream<String> lineStream = Files.lines(Path.of("ファイルパス"));
// パスオブジェクトを作成します(Java 11+)。
Path path = Path.of("ファイルパス");
メソッド一覧
| メソッド | 概要 |
|---|---|
| Files.readString(Path) | ファイル全体を UTF-8 文字列として読み込みます(Java 11+)。文字コードを第2引数で指定することもできます。 |
| Files.readAllLines(Path) | ファイルの全行を List<String> として読み込みます。行末の改行文字は含みません。 |
| Files.lines(Path) | ファイルの全行を Stream<String> として返します(Java 8+)。大きなファイルを遅延読み込みする場合に有効です。 |
| Path.of(String) | 文字列からパスオブジェクトを作成します(Java 11+)。Paths.get() と同等です。 |
サンプルコード
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
// ファイル全体を文字列として読み込みます(Java 11+)。
try {
String content = Files.readString(Path.of("sample.txt"));
System.out.println(content); // ファイルの内容が出力されます。
} catch (IOException e) {
e.printStackTrace();
}
// ファイルの全行をリストとして読み込みます。
try {
List<String> lines = Files.readAllLines(Path.of("sample.txt"));
System.out.println("行数: " + lines.size());
for (String line : lines) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
// ストリームで処理します(大きなファイルに有効)。
try (var stream = Files.lines(Path.of("sample.txt"))) {
stream
.filter(line -> line.startsWith("//"))
.forEach(System.out::println); // コメント行だけ出力されます。
} catch (IOException e) {
e.printStackTrace();
}
概要
『readString()』と『readAllLines()』はファイル全体をメモリに読み込むため、数百MB以上の大きなファイルを読み込む場合はメモリ不足になる可能性があります。大きなファイルには『Files.lines()』または BufferedReader を使って1行ずつ処理してください。
『Files.lines()』は Stream を返すため try-with-resources で使用してください。ストリームを閉じないとファイルハンドルが解放されません。デフォルトの文字コードは UTF-8 ですが、異なる場合は第2引数に Charset(例: Charset.forName("Shift_JIS"))を指定します。
ファイルへの書き込みについては『Files.writeString() / Files.write()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。