2016-02-05 75 views
1

我有兩個文件除了行結束碼以外都是相同的。使用換行符(linux/Unix)的字符工作(讀取所有550行數據),使用換行符和換行符(Windows)在讀取269行後停止返回行。在這兩種情況下,數據都可以正確讀取到它們停止的位置。 如果我在失敗的文件上運行dos2unix,則生成的文件有效。在窗口上使用com.opencsv.CSVReader會提前停止讀取線條

我希望能夠讀取CSV文件,而不管它們的來源。如果我至少能夠在讀取部分數據之前檢測到文件格式錯誤 即使我可以在閱讀文件的過程中隨時告訴它它不起作用,我可以輸出一個錯誤。 我目前閱讀文件的一半狀態並終止沒有錯誤是危險的。

回答

0

問題在於,openCSV使用了一個BufferedReader which reads a line from the stream until it gets to the Systems line.seperator

如果您事先知道該文件的行分隔符是在您的應用程序中,只需執行System.setProperty(「line.separator」,newLine),其中newLine是「\ n」或「\ r \ n」基於你將要解析的文件。或者您可以將其作爲參數傳入。

如果您想自動檢測文件字符。創建一個方法來獲取你想要的文件,創建一個BufferedReader並讀取一行。如果最後一個字符是'\ r',那麼你的系統系統使用「\ n」,但是你想把它設置爲「\ r \ n」。否則,如果line.contains(「\ n」)返回true,那麼你在使用「\ r \ n」的系統上,並且想將其設置爲「\ n」。否則,系統和您正在閱讀的文件具有兼容的換行符。

請注意,如果您要更改系統換行符,請務必在處理完文件後將其設回,以防您的程序正在處理多個文件。

+0

另外,其他CSV庫在不需要額外工作的情況下可以統一處理各種換行。因此,如果不需要專門使用OpenCSV,則可以使用像Jackson的CSV模塊(https://github.com/FasterXML/jackson-dataformat-csv)這樣的替代方法。 – StaxMan

+0

這看起來很不錯。我對OpenCSV沒有要求,也沒有任何必須完美工作的csv文件範圍的控制權,所以Jackson-dataformat-csv看起來很有前途。謝謝。 – Ron