web-dev-qa-db-ja.com

Java 8を使用して、ファイル内のすべての行を印刷するための最も好ましい簡潔な方法は何ですか?

新しいJava 8を使用して、ファイル内のすべての行を印刷するための最も好ましい簡潔な方法は何ですか?

出力は、次のようにファイルのコピーである必要があります。

[Line 1 ...]
[Line 2 ...]

古いバージョンでそれを行う方法はありますが、質問はラムダを使用したJava-8に関係しています。 Java-8が何であるかを示してください!

13
The Coordinator

これは、tryEnclosureでラムダを含む新しいストリームを使用します。

私はそれが最も好まれて簡潔な方法であると言うでしょう:

1)完了すると自動的にストリームを閉じ、例外を適切にスローします。

2)これの出力は怠惰です。各行は、最後の行が処理された後に読み取られます。これは、元のJavaストリームベースのファイル処理仕様にも近いです。

3)ファイル内のデータに最も近い方法で各行を印刷します。

4)Files.readAllLines(...)などの中間リストまたは配列を作成しないため、これはメモリ消費量が少なくなります

5)提供されるStreamオブジェクトには、データを操作するための他の多くの用途と関数(変換、コレクション、述語など)があるため、これは最も柔軟性があります。

 try (Stream<String> stream = Files.lines(Paths.get("sample.txt"),Charset.defaultCharset())) {
            stream.forEach(System.out::println);
 }

パスと文字セットが提供され、コンシューマーが任意のオブジェクトを取得できる場合、これも機能します。

 try (Stream stream = Files.lines(path,charset)) {
            stream.forEach(System.out::println);
 }

エラー処理あり:

 try (Stream<String> stream = Files.lines(Paths.get("sample.txt"),Charset.defaultCharset())) {
            stream.forEach(System.out::println);
 } catch (IOException ex) {
        // do something with exception
 } 
28
The Coordinator

本当に必要ありませんJava 8:

System.out.println(Files.readAllLines(path, charset));

本当にストリームを使用したい場合、またはよりクリーンなプレゼンテーションが必要な場合:

Files.readAllLines(path, charset).forEach(System.out::println);
11
assylias

簡単な解決策は次のとおりです。

System.out.println( new String(Files.readAllBytes(Paths.get("sample.Java"))) );
5
Nery Jr