我正在使用Apache Commons CSV lib来编写CSV文件。
提供给我的样本有一种奇怪的模式。
预期的样本输出:
可以看出,带有指定列的名称可以包含逗号值。所以他们需要被引用。 但是,有些值存在空格,例如,电话号码,只能是空格,或者是操作列,其中值可以包含空格(中间或末尾)。
现在,当我使用apache commons库编写CSV时,我使用以下 CSVFormat 和 CSVPrinter 类。
CSVFormat.EXCEL.withQuoteMode(QuoteMode.MINIMAL));
此配置提供了与样本最接近的输出。但是,空格或带尾随空格的值,即使没有逗号,也会被引用。
我的输出:
我需要的是,当结尾只有空格或空格,且值没有逗号时,引号不会出现。
Apache Commons中是否有任何我缺少的配置?或者是否有其他CSV库具有提供此输出的格式?
答案 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)
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>