使用OpenCSV编写CSV文件时,双引号会重复

时间:2016-04-20 19:03:17

标签: java opencsv

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

  

代码:

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();
    }
}
  

预期产出:

ONE|"TWO"|"THREE"|"FOUR"

  

实际输出:

ONE|""TWO""|""THREE""|""FOUR""

我们可以看到有两个,三个和四个双引号,但在输出中双引号重复

我不想这样,已经尝试了CSVWriter类的几个选项和构造函数,但无法对此进行排序。

任何人遇到类似问题或知道出路?

由于

2 个答案:

答案 0 :(得分:2)

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

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

原因我发现默认情况下CSVWriter正在考虑将"作为转义字符,因此如果它出现在字符串中,它会尝试 Escape "DEFAULT_ESCAPE_CHARACTER "本身不是CSVWriter.NO_ESCAPE_CHARACTER

通过传递{{1}},Writer不会担心检查 Escapes 之间是否有任何需要。

答案 1 :(得分:0)

如果您使用的是com.opencsv.bean.StatefulBeanToCsv构建的com.opencsv.bean.StatefulBeanToCsvBuilder而不是com.opencsv.CSVWriter;

不能直接将选项设置为构造函数参数,但是必须通过调用相应的方法进行设置:.withQuotechar().withEscapechar()

赞:

StatefulBeanToCsvBuilder btcsvBuilder = new StatefulBeanToCsvBuilder(myOutputStreamWriter);
StatefulBeanToCsv btcsv = btcsvBuilder.withQuotechar(CSVWriter.NO_QUOTE_CHARACTER).withEscapechar(CSVWriter.NO_ESCAPE_CHARACTER).withMappingStrategy(myMapStrategy).withSeparator(',').build();