2017-03-21 27 views
0

我想按行分割一個文本文件,所以在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

爲什麼不使用'Files.readAllLines()'? – shmosel

+0

爲什麼要在將文件分割成行之前先將整個文件加載到內存中,何時可以使用'BufferedReader'的'readLine()'方法直接從文件中讀取行? – Andreas

回答

3

嘗試Files.readAllLines。或者Files.lines這將返回你的線Stream

readAllLines的Javadoc:

該方法可以識別以下作爲行終止:

  • \ u000D隨後\ u000A,回車跟LINE FEED
  • \ u000A, LINE FEED
  • \ u000D,CARRIAGE RETURN

從一個文件系統複製到另一個文件系統不會更改文件的內容(除非您正在執行一些「特殊」複製;-))。

1

如果您創建了一個文件,它將使用該平臺原生的任何行分隔符。

如果您然後在另一個平臺上打開該文件,則該文件不會更改。如果您在Windows上打開一個unix文件,它不會獲得額外的\r字符。

它確實取決於編輯器的外觀,有些編輯器比其他編輯器處理得更好。

至於Java,如果您需要指定行尾字符序列,則只需使用System.lineSeparator()

正如@Andreas所提到的,您可以使用BufferedReader.readLine()一次讀取一行文件,它將以獨立於平臺的方式處理行尾字符序列。