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

时间:2016-02-05 06:44:27

标签: opencsv dos2unix

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

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

1 个答案:

答案 0 :(得分: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并读取一行。如果最后一个字符是'\ _ \',那么您的系统系统使用“\ n”,但您想将其设置为“\ r \ n”。否则,如果line.contains(“\ n”)返回true,那么您所在的系统使用“\ r \ n”,并且您希望将其设置为“\ n”。否则,您正在阅读的系统和文件具有兼容的换行符。

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