Javaを使用して大きなテキストファイルを行ごとに読み取るにはどうすればいいですか? 質問する

Javaを使用して大きなテキストファイルを行ごとに読み取るにはどうすればいいですか? 質問する

Java を使用して、約 5 ~ 6 GB の大きなテキスト ファイルを行ごとに読み取る必要があります。

これを早く行うにはどうすればいいでしょうか?

ベストアンサー1

一般的なパターンは、

try (BufferedReader br = new BufferedReader(new FileReader(file))) {
    String line;
    while ((line = br.readLine()) != null) {
       // process the line.
    }
}

文字エンコードがないと仮定すると、データをより速く読み取ることができます。たとえば、ASCII-7 ですが、それほど大きな違いはありません。データに対する操作には、はるかに長い時間がかかる可能性が高くなります。

編集: リークの範囲を回避するために使用する、あまり一般的ではないパターンline

try(BufferedReader br = new BufferedReader(new FileReader(file))) {
    for(String line; (line = br.readLine()) != null; ) {
        // process the line.
    }
    // line is not visible here.
}

更新: Java 8では次のようにできます

try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
        stream.forEach(System.out::println);
}

注意: ストリームをリソースを試すブロックして、#close メソッドが確実に呼び出されるようにします。そうしないと、GC がずっと後になってから実行するまで、基になるファイル ハンドルが閉じられません。

おすすめ記事