言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Java辞典

  1. トップページ
  2. Java辞典
  3. new BufferedReader() / リーダー.readLine()

new BufferedReader() / リーダー.readLine()

対応: Java 1.0(1996)

『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 構文で自動的に呼び出されます。

サンプルコード

sample_Main.java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;

class Main {
    public static void main(String[] args) throws IOException {
        // 標準入力から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行ずつ読み取ります。
        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()』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。