Files.lines方法删除行尾字符

时间:2018-06-21 11:02:52

标签: java nio

我观察到以下代码删除了行尾字符(^ M DOS / Windows行尾字符)

 Files.lines(Paths.get("filePath/file.txt"))
      .forEach(System.out::print);

javadoc没有说它将删除它,是设计使然还是我在这里遗漏了什么?

如果我必须保留原始的行结束符怎么办?

1 个答案:

答案 0 :(得分:0)

您自己将其删除。当您使用lines方法时,它将逐行选择每行并将其作为流传递,然后使用System.out.print而不是System.out.println进行打印,因此从流中不会打印任何新行。

希望有帮助。 :)

-编辑-

如注释中所述,对于.lines(),行尾是一个定界符,而定界符永远不会在标记中返回。您可以假设除最后一行外的每一行都以结尾结尾。

或者您可以如下更新代码:

Files.lines(Paths.get("filePath/file.txt")).map(p->p+"\n")
      .forEach(System.out::print);

但是在这种情况下,即使在最后一行中,它也会添加行尾。