Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在使用open CSV Writer从java中的bean对象生成txt文件时添加了额外的回车符_Java_Csv_Opencsv - Fatal编程技术网

在使用open CSV Writer从java中的bean对象生成txt文件时添加了额外的回车符

在使用open CSV Writer从java中的bean对象生成txt文件时添加了额外的回车符,java,csv,opencsv,Java,Csv,Opencsv,我在将bean对象转换为csv/txt格式的文件时遇到了一个问题。我已在代码中将新行字符明确声明为“\r\n”,它将被open csv writer的行结束字符覆盖 在Windows上运行的本地tomcat服务器上,一切正常,即每次录制后我都会获得CR和LF。但是如果我尝试在Linux基础机器上生成csv/txt文件,我得到的是一条记录被CRCRLF隔开,也就是说,一个额外的CR是从记录后面的no-where添加的。我只需要CRLF。我的本地和远程计算机上的代码和配置相同。唯一的区别是底层操作系

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

在Windows上运行的本地
tomcat
服务器上,一切正常,即每次录制后我都会获得CR和LF。但是如果我尝试在Linux基础机器上生成csv/txt文件,我得到的是一条记录被
CRCRLF
隔开,也就是说,一个额外的CR是从记录后面的no-where添加的。我只需要CRLF。我的本地和远程计算机上的代码和配置相同。唯一的区别是底层操作系统。该行的数据没有问题

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


你知道为什么会这样吗?我正在使用
au.com.bytecode.opencsv.CSVWriter#writeAll(列出所有行)API
。此写入程序的默认行结束字符是
“\n”
(即LF),如上所述,我已在代码中用
“\r\n”(即CRLF)
覆盖了此字符。它是否为不同于windows和linux的新行标记选择了一些系统默认设置。如果是这样,那么当我为每种类型的环境明确说明了recordTerminator时,它为什么要这样做。如果是这样的话,我该怎么解决这个问题呢。非常感谢您在这方面的帮助。非常感谢。

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

如果没有任何效果,请尝试使用“解析/写入”,因为它会在读写时自动规范行结尾并修剪空白。它也比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"));
CsvParserSettings设置=新建CsvParserSettings();//您将在这里找到许多选项,请查看教程。
CsvParser parser=新的CsvParser(设置);
List allRows=parser.parseAll(新文件(“/path/to/your.csv”);

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

您可能正在编写已经包含CR的值

如果没有任何效果,请尝试使用“解析/写入”,因为它会在读写时自动规范行结尾并修剪空白。它也比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"));
CsvParserSettings设置=新建CsvParserSettings();//您将在这里找到许多选项,请查看教程。
CsvParser parser=新的CsvParser(设置);
List allRows=parser.parseAll(新文件(“/path/to/your.csv”);

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

感谢您的回复。正如我在前面的评论中提到的,这些值是可以接受的。我自己也有同样的疑问,但正如前面提到的,如果值包含额外的CR,那么它应该是每一行,而不是只有一行,因为我对所有行都使用相同的零。亲爱的Jeronimo Backes,您能告诉我为什么额外的CR只附加一行(在linux环境中)。我们无法使用用户解析器,因为我们正在生成的文件没有被我们的系统读取,但是这个文件将被一些不受我们控制的外部系统读取。你有什么建议来处理这种情况吗?我不清楚你需要什么。您能否提供一个示例来演示对您来说有问题的行为,以及预期的输出应该是什么?我很乐意帮你。如果你能查看我上面评论中的截图,第五行有一个额外的CR作为行尾,而不是CRLF。我的期望是第5行不应该包含额外的CR作为行结束字符,它应该与其他行相同。这个额外的CR只在linux环境中出现。屏幕截图一点帮助都没有。您是否可以编辑或创建一个新问题,列出您用于生成此输出的相关java代码,以及您发送到库以供编写的输入数据示例,以便我可以尝试运行代码,重现意外行为并查看发生了什么?感谢您的回复。正如我在前面的评论中提到的,这些值是可以接受的。我自己也有同样的疑问,但正如前面提到的,如果值包含额外的CR,那么它应该是每一行,而不是只有一行,因为我对所有行都使用相同的零。亲爱的Jeronimo Backes,您能告诉我为什么额外的CR只附加一行(在linux环境中)。我们无法使用用户解析器,因为我们正在生成的文件没有被我们的系统读取,但是这个文件将被一些不受我们控制的外部系统读取。你有什么建议来处理这种情况吗?我不清楚你需要什么。您能否提供一个示例来演示对您来说有问题的行为,以及预期的输出应该是什么?我很乐意帮你。如果你能查看我上面评论中的截图,第五行有一个额外的CR作为行尾,而不是CRLF。我的期望是第5行不应该包含额外的CR作为行结束字符,它应该与其他行相同。这个额外的CR只在linux环境中出现。屏幕截图一点帮助都没有。您是否可以编辑或创建一个新问题,列出您需要的相关java代码