Используя Java 8, каков наиболее предпочтительный и сжатый способ печати всех строк в файле?

Каков наиболее предпочтительный и сжатый способ печати всех строк в файле с помощью нового Java 8?

Вывод должен быть копией файла, строки для строки, как в:

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

Вопрос относится к Java-8 с лямбдами, хотя есть способы сделать это в более старых версиях. Покажите, что такое Java-8!

Ответ 1

Это использует новый поток с лямбдой в тестовом приложении.

Я бы сказал, что это самый предпочтительный и лаконичный путь, потому что:

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
 } 

Ответ 2

Вам не нужна Java 8:

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

Если вы действительно хотите использовать поток или нуждаетесь в более чистой презентации:

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

Ответ 3

Вот простое решение:

System.out.println( new String(Files.readAllBytes(Paths.get("sample.java"))) );