当前位置: 首页 > 知识库问答 >
问题:

使用OpenCSV编写CSV文件时双引号被复制

唐兴发
2023-03-14

我试图使用OpenCSV库编写一个简单的CSVWriter代码,但它有一个奇怪的问题。

代码:

public class Test {

    public static void main(String[] args) throws IOException {

       String[] header = {"ONE", "\"TWO\"", "\"THREE\"", "\"FOUR\""};

       CSVWriter writer = new CSVWriter(new FileWriter("C:/test.csv"), '|', CSVWriter.NO_QUOTE_CHARACTER);

       writer.writeNext(header);

       writer.flush();       
       writer.close();
    }
}

预期产出:

1 |“2”|“3”|“4”

实际产出:

一个|"两个"|"三"|"四"

正如我们所见,在2、3和4周围有双引号,但在输出中,双引号是重复的。

我不想这样,我尝试了几个选项和CSVWriter类的构造函数,但没能解决这个问题。

有人面临过类似的问题或知道出路吗?

谢谢

共有2个答案

钱言
2023-03-14

如果您使用com.opencsv.bean.StatefulBeanToCsv构建com.opencsv.bean.StatefulBeanToCsvBuilder代替com.opencsv.CSVWriter

不能直接将选项设置为构造函数参数,但必须通过调用相应的方法来设置:。使用QuoteChar()。withEscapechar()

像这样:

StatefulBeanToCsvBuilder btcsvBuilder = new StatefulBeanToCsvBuilder(myOutputStreamWriter);
StatefulBeanToCsv btcsv = btcsvBuilder.withQuotechar(CSVWriter.NO_QUOTE_CHARACTER).withEscapechar(CSVWriter.NO_ESCAPE_CHARACTER).withMappingStrategy(myMapStrategy).withSeparator(',').build();
曹铭晨
2023-03-14

让它工作,下面的构造函数工作:

CSVWriter writer = new CSVWriter(new FileWriter("C:/test.csv"), '|', CSVWriter.NO_QUOTE_CHARACTER, CSVWriter.NO_ESCAPE_CHARACTER);

原因我看到CSVWriter正在考虑"作为默认的转义字符,因此如果它在字符串中,它将尝试转义"DEFAULT_ESCAPE_CHARACTER这不是什么,但"本身。

通过传递CSVWriter。没有_ESCAPE_CHARACTER,作者不必担心在转义之间是否需要检查任何内容。

 类似资料:
  • 我正在尝试使用OpenCSV解析CSV文件。其中一列以YAML序列化格式存储数据,并被引用,因为其中可以包含逗号。它里面也有引号,所以它通过放两个引号来转义。我能够在Ruby中轻松解析这个文件,但使用OpenCSV我无法完全解析它。这是一个UTF-8编码的文件。 这是我的Java片段,它试图读取文件 这是此文件中的2行。第一行没有被正确解析,并且在处被拆分,因为我猜是转义双引号。

  • 我正在使用opencsv读取csv文件。有时csv文件中包含单引号或双引号。如何读取它们而不更改csv文件本身中的数据。 现在,如果我用两个单引号替换一个单引号,它工作正常,与双引号相同,用两个替换单个引号,它的工作原理。但我不想碰源文件。 要访问的代码如下: 这样做的结果是跳过下一行(也包含双引号),插入所有奇数行,跳过偶数行 提前谢谢

  • 本文向大家介绍Java中使用opencsv读写csv文件示例,包括了Java中使用opencsv读写csv文件示例的使用技巧和注意事项,需要的朋友参考一下 OpenCSV是一个简单的用于解析CSV文件的java类库,它封装了CSV格式文件的输出和读入,可以自动处理CSV格式中的特殊字符,最重要的是OpenCSV可以用于商业化(commercial-friendly)。具体的使用方法: 读CSV文件

  • 问题内容: 我正在编写一个Java应用程序以将数据从Oracle导出到CSV文件 不幸的是,数据的内容可能非常棘手。分隔符仍然是逗号,但连续的一些数据可能是这样的: 因此,这是该列上的字符串之一: 我说:“我是5‘10”。 别开玩笑了,我需要在Java生成的CSV文件中的excel或开放式办公室中显示上述注释,而又不能妥协,并且当然不能弄乱其他常规的转义符情况(即,常规的双引号和元组中的常规逗号)

  • 我正在尝试将XML文件转换为CSV。解析XML并进行转换。在写入CSV文件时,我遇到了问题。如果数据具有“新行”(即,\n或\r),则它将作为新数据出现在下一个记录中。因此,我无法使用OpenCSV CSVWriter生成正确的文档。我需要包装单元格,以便它可以访问/写入该单元格中的数据。 在CSVWriter之上,我创建并写入如下数据: 输入XML文件: 预期输出: 如果能得到帮助,我们将不胜感

  • 样本数据- Header1,full_name,header3,header4 > 20,“Bob,XXX”,“Test”,30 20,“Evan”s,YYY“,”Test“,30 20,“Tom,ZZZ”,“Test”,30 第二行读起来不像预期的那样。因为full_name列值中有一个双引号。 我想忽略这类案件。任何建议都将不胜感激。 使用openCSV Java api进行解析。 编辑: 我