逐行分割文本,独立于平台

时间:2017-03-21 22:10:09

标签: java encoding

我想逐行拆分文本文件,因此在Windows上text = new String(Files.readAllBytes(path), charset); text.split("\r\n", -1),在UNIX上text.split("\n", -1)text.split(System.lineSeparator(), -1)适用于两者。但是,如果在UNIX上创建文件并将其复制到Windows,反之亦然,那该怎么办呢?如何才能最好地处理这些案例?这对于文件本身意味着什么 - 如果你试图在像记事本这样的文本编辑器中查看它会被破坏吗?

2 个答案:

答案 0 :(得分:3)

试试Files.readAllLines。或者Files.lines,它会返回Stream行。

来自readAllLines的javadoc:

  

此方法将以下内容识别为行终止符:

     
      
  • \ u000D后跟\ u000A,CARRIAGE RETURN后跟LINE FEED
  •   
  • \ u000A,LINE FEED
  •   
  • \ u000D,CARRIAGE RETURN
  •   

从一个文件系统复制到另一个文件系统并不会改变文件的内容(除了你正在做一些"特殊"复制;-))。

答案 1 :(得分:1)

如果您创建了一个文件,它将使用该平台原生的任何行分隔符。

如果您随后在另一个平台上打开该文件,则该文件不会更改。如果您在Windows上打开一个unix文件,它就不会获得额外的\r字符。

它真的取决于编辑器的外观,一些编辑比其他编辑更好地处理事情。

对于Java,如果需要指定行尾字符序列,只需使用System.lineSeparator()

正如@Andreas所提到的,您可以使用BufferedReader.readLine()一次读取一行文件,它将以独立于平台的方式处理行尾字符序列。

相关问题