JAVA CSV写作空间没有引号

时间:2018-06-14 11:27:45

标签: java csv apache-commons spaces

我正在使用Apache Commons CSV lib来编写CSV文件。

提供给我的样本有一种奇怪的模式。

预期的样本输出:

  • 姓名,电话,行动,日期
  • “John Doe,Officer”,正在调查中,2017年6月8日
  • Jack,+ 123-4567,False Allegation,2017年6月4日

可以看出,带有指定列的名称可以包含逗号值。所以他们需要被引用。 但是,有些值存在空格,例如,电话号码,只能是空格,或者是操作列,其中值可以包含空格(中间或末尾)。

现在,当我使用apache commons库编写CSV时,我使用以下 CSVFormat CSVPrinter 类。

CSVFormat.EXCEL.withQuoteMode(QuoteMode.MINIMAL));

此配置提供了与样本最接近的输出。但是,空格或带尾随空格的值,即使没有逗号,也会被引用。

我的输出:

  • 姓名,电话,行动,日期
  • “John Doe,Officer”,“”,正在调查中,2017年6月8日
  • Jack,+ 123-4567,“False Allegation”,2017年6月4日

我需要的是,当结尾只有空格或空格,且值没有逗号时,引号不会出现。

Apache Commons中是否有任何我缺少的配置?或者是否有其他CSV库具有提供此输出的格式?

2 个答案:

答案 0 :(得分:1)

univocity-parsers做你想要的。试试这段代码:

    CsvWriterSettings settings = Csv.writeExcel();
    settings.trimValues(false); //values are trimmed by default
    settings.setHeaders("Name with designation","Phone","Action","Date");
    settings.setHeaderWritingEnabled(true);

    StringWriter output = new StringWriter();
    CsvWriter writer = new CsvWriter(output, settings);

    writer.writeRow("John Doe,Officer"," ","Under investigation","8-Jun-2017");
    writer.writeRow("Jack","+123-4567","False Allegation ","4-Jun-2017");

    writer.close();

    System.out.println(output);

输出将是:

Name with designation,Phone,Action,Date
"John Doe,Officer", ,Under investigation,8-Jun-2017
Jack,+123-4567,False Allegation ,4-Jun-2017

希望它有所帮助。

免责声明:我是这个图书馆的作者。它是开源和免费的(Apache 2.0许可证)

答案 1 :(得分:1)

您可以使用super-csv。这是在RFC-4180

之后
 CsvListWriter c = new CsvListWriter(new PrintWriter(System.out), CsvPreference.STANDARD_PREFERENCE);
 c.write(Lists.newArrayList(" Aa", " ", " John \"Doe\"", "Comma,", "test "));

 c.flush();
 c.close();

写入:

 Aa, ," John ""Doe""","Comma,",test 

Maven依赖性:

<!-- https://mvnrepository.com/artifact/net.sf.supercsv/super-csv -->
<dependency>
    <groupId>net.sf.supercsv</groupId>
    <artifactId>super-csv</artifactId>
    <version>2.4.0</version>
</dependency>