使用新的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 }