使用open CSV Writer

时间:2016-05-14 04:24:43

标签: java csv opencsv

我在将bean对象转换为csv / txt格式的文件时遇到了问题。我已在我的代码中明确声明新行字符为'\ r \ n',它将被open csv writer的行结束字符覆盖。

在Windows上运行的本地tomcat服务器上一切正常。即我在每条记录后获得CR和LF。但是如果我尝试在Linux基本机器上生成csv / txt文件,我得到的是一条记录由CRCRLF分隔,即从记录后的任何地方添加额外的CR。我只想要CRLF。我的本地和远程机器上的代码和配置是相同的。唯一的区别是底层操作系统。该行的数据没有问题。

我已将screenshot附加到错误的输出文件中(虽然这不是确切的但是大约450行,第112行有问题)。我最初怀疑具有问题的特定行具有回车字符和最后一个零(0)但深入检查代码并发现数据没有问题,因为零(0)是固定值并且没有从任何数据库中挑选。此修订值从JAVA常量文件开始读取,并且对于每一行都是相同的。如果出现问题,那么每一行都会出现问题。

有关为何发生这种情况的任何想法?我正在使用au.com.bytecode.opencsv.CSVWriter#writeAll(List allLines) API。默认行此作者的结束字符是"\n"(即LF),如上所述,我在代码中用"\r\n"(i.e. CRLF)覆盖了它。它是否为新的行标记选择一些系统默认设置,这些设置对于windows和linux是不同的。如果是这样的话,为什么在我为每种类型的环境明确声明recordTerminator时这样做。如果是这种情况那么我该如何解决这个问题。拜托,我真的很感激。很多,谢谢。

1 个答案:

答案 0 :(得分:0)

可能是您正在编写包含CR的值。

如果没有任何效果,请尝试使用uniVocity-parsers'解析/写入,因为它标准化行结尾并在读取和写入时自动修剪空白。它也比OpenCSV快。

以下是一个如何使用它的简单示例:

CsvParserSettings settings = new CsvParserSettings(); // you'll find many options here, check the tutorial.
CsvParser parser = new CsvParser(settings);
List<String[]> allRows = parser.parseAll(new File("/path/to/your.csv"));

披露:我是这个图书馆的作者。它是开源和免费的(Apache V2.0许可证)。