Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
new BufferedReader() / リーダー.readLine()
『BufferedReader』はテキスト入力をバッファリングして効率よく読み取るクラスです。ファイルや標準入力を1行ずつ読み取る際に使われます。Java 7以降の try-with-resources 構文と組み合わせることで、クローズ処理を自動化できます。
構文
// 標準入力を読み取る BufferedReader を作成します。
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// ファイルを読み取る BufferedReader を作成します。
BufferedReader reader = new BufferedReader(new FileReader("ファイルパス"));
// 1行読み取ります(ファイル末尾では null を返します)。
String line = reader.readLine();
メソッド一覧
| クラス・メソッド | 概要 |
|---|---|
| new BufferedReader(Reader) | 指定した Reader をラップしてバッファリングを追加します。 |
| new InputStreamReader(InputStream) | バイトストリームを文字ストリームに変換します。文字コードの指定も可能です。 |
| readLine() | 1行を文字列として読み取ります。行末の改行文字は含みません。ファイル末尾に達した場合は null を返します。 |
| lines() | 全行を Stream<String> として返します(Java 8+)。ストリーム処理と組み合わせて使えます。 |
| close() | ストリームを閉じます。try-with-resources 構文で自動的に呼び出されます。 |
サンプルコード
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 標準入力から1行読み取ります。
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
System.out.print("入力してください: ");
String line = reader.readLine();
System.out.println("入力値: " + line);
} catch (IOException e) {
e.printStackTrace();
}
// ファイルを1行ずつ読み取ります。
import java.io.FileReader;
try (BufferedReader br = new BufferedReader(new FileReader("sample.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line); // 各行の内容が出力されます。
}
} catch (IOException e) {
e.printStackTrace();
}
// lines() でストリームとして処理します(Java 8+)。
try (BufferedReader br = new BufferedReader(new FileReader("sample.txt"))) {
br.lines()
.filter(l -> !l.isEmpty())
.forEach(System.out::println); // 空行を除いた各行が出力されます。
} catch (IOException e) {
e.printStackTrace();
}
概要
『BufferedReader』は内部バッファを持つため、1文字ずつ読み込む FileReader 単体と比べて大幅に高速です。readLine() はファイル末尾で null を返すため、null チェックを while 条件に含めてください。
Java 7以降の try-with-resources 構文(try (BufferedReader br = ...))を使うと、ブロック終了時に自動的に close() が呼ばれます。明示的な close() の呼び忘れを防ぐためにも積極的に使用してください。
ファイル全体をまとめて読み込む方法については『Files.readString() / Files.readAllLines()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。