在 Windows 上使用 com.opencsv.CSVReader 可以过早地停止读取行



我有两个文件,除了行尾代码外,它们完全相同。使用换行符(linux/Unix(字符的那个工作(读取所有550行数据(,使用回车符和换行符(Windows(的那个在读取269行后停止返回行。在这两种情况下,数据都会被正确读取,直到它们停止为止。如果我在失败的文件上运行dos2unix,则生成的文件可以工作。

我希望能够读取CSV文件,无论其来源如何。如果我至少可以在读取部分数据之前检测到文件的格式错误,那将很有帮助即使我可以在读取文件的过程中随时告诉它不起作用,我也可以输出错误。我目前读取一半文件并无错误终止的状态很危险。

问题是在

封面下,openCSV使用一个BufferedReader,它从流中读取一行,直到它到达Systems line.seperator。

如果您事先知道文件的行分隔符是什么,那么在您的应用程序中只需执行 System.setProperty("line.separator", newLine(,其中 newLine 是 "" 或 "\r" 基于您要解析的文件。 或者,您可以将其作为参数传入。

如果要自动检测文件字符。 创建一个将获取所需文件的方法,创建一个 BufferedReader 并读取一行。 如果最后一个字符是"\r",则系统系统使用"",但您希望将其设置为"\r"。 否则,如果 line.contains(""( 返回 true,则您使用的是使用 "\r" 的系统,并且希望将其设置为 ""。 否则,您正在读取的系统和文件具有兼容的换行符。

请注意,如果您确实更改了系统换行符,请确保在处理文件后将其设置回来,以防程序正在处理多个文件。

最新更新