1

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

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

4

1 回答 1

0

问题在于,在幕后 openCSV 使用BufferedReader 从流中读取一行,直到它到达系统 line.seperator

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

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

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

于 2016-02-05T17:01:55.790 回答