使用Java 8,打印文件中所有行的最优选,最简洁的方法是什么?


问题内容

使用新的Java 8打印文件中所有行的最优选,最简洁的方法是什么?

输出必须是文件的副本,一行一行,如下所示:

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

这个问题与带有lambda的Java-8有关,即使在较旧的版本中也可以这样做。展示Java-8的全部含义!


问题答案:

这会在try围栏中使用带有lambda的新Stream。

我想说这是最可取的和简洁的方法,因为:

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
 }