[英]CSVPrinter print delimiter before each line
我需要用 java 写一个 csv,我使用的是 org.apache.commons,但是打印文件时分隔符“;” 出现在每一行之前。
我的代码
public static Object createCsvFile(JsonArray array, HttpServletResponse response) {
var header = array.get(0).getAsJsonObject().keySet();
try {
StringWriter stringWriter = new StringWriter();
CSVPrinter csvPrinter = new CSVPrinter(stringWriter, CSVFormat.newFormat(';'));
csvPrinter.printRecord(header);
for (int i = 0; i < array.size(); i++) {
JsonObject values = array.get(i).getAsJsonObject();
Set<String> keys = values.keySet();
csvPrinter.print("\r\n");
for (String key: keys) {
csvPrinter.printRecord(values.get(key).toString() + ";");
}
}
csvPrinter.close();
return stringWriter.toString();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
我的结果
;4;"11/10/2022 06:10";117;"ENTRADA POR PRODUCAO";422;"LINGUICA DE CARNE SUINA - AURORA - 5KG - CHURRASCO";"MI";"078911644790352718";"0422101011";"10/10/2022";1025;"116-BRASIL - MI";
请注意,在 4 之前有一个“;”
我尝试使用我在用户指南中找到的一些替代方法,但我什么也没得到。
如果你删除+ ";"
在csvPrinter.printRecord(values.get(key).toString() + ";");
,您会看到在每一行之前添加它们的是您的CSVPrinter
。
您应该让CSVPrinter
处理定界符。
只是为了给你一些灵感,试试这个:
public static Object createCsvFileBis(JsonArray array, HttpServletResponse response) {
var header = array.get(0).getAsJsonObject().keySet();
try (
StringWriter stringWriter = new StringWriter();
CSVPrinter csvPrinter = new CSVPrinter(stringWriter, CSVFormat.newFormat(';'))
) {
csvPrinter.printRecord(header);
for (int i = 0; i < array.size(); i++) {
JsonObject values = array.get(i).getAsJsonObject();
Set<String> keys = values.keySet();
csvPrinter.printRecord("\n");
List<String> row = new ArrayList<>();
for (String key : keys) {
row.add(values.get(key).toString());
}
csvPrinter.printRecord(row);
}
csvPrinter.flush();
return stringWriter.toString();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.