繁体   English   中英

CSVPrinter 在每行前打印定界符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM