我想逐行拆分文本文件,因此在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,反之亦然,那该怎么办呢?如何才能最好地处理这些案例?这对于文件本身意味着什么 - 如果你试图在像记事本这样的文本编辑器中查看它会被破坏吗?
答案 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()
一次读取一行文件,它将以独立于平台的方式处理行尾字符序列。