使用 Univocity 在输出 CSV 中设置自定义 headers

Set custom headers in output CSV using Univocity

我使用 Univocity 使用以下代码将结果集转换为 CSV 格式的字符串:

StringWriter stringWriter = new StringWriter();

    CsvWriterSettings csvWriterSettings = new CsvWriterSettings();

    ResultSetMetaData metaData = resultSet.getMetaData();

    int columnCount = metaData.getColumnCount();

    String headers[] = new String[columnCount];

    for (int i = 0; i < columnCount; i++) {

        headers[i] = metaData.getColumnLabel(i + 1);

    }

    for (int i = 0; i < headers.length; i++) {

        if (fieldMapping != null && fieldMapping.containsKey(headers[i])) {

            headers[i] = fieldMapping.get(headers[i]);

        }
    }

    csvWriterSettings.setHeaders(headers);

    csvWriterSettings.setHeaderWritingEnabled(true);

    if (csvSeparator != null) {

        csvWriterSettings.getFormat().setDelimiter(csvSeparator.charAt(0));

    }

    if (isQuoteFields) {

        csvWriterSettings.setQuoteAllFields(true);
    }

    if (isCStyleEscape) {

        csvWriterSettings.getFormat().setQuoteEscape(',');

        csvWriterSettings.getFormat().setCharToEscapeQuoteEscaping('\');

    }

    CsvRoutines csvRoutines = new CsvRoutines(csvWriterSettings);

    csvRoutines.write(resultSet, stringWriter);

    return stringWriter.toString();

我正在尝试在输出中设置自定义 header,但返回的输出始终具有默认值 header。

有什么方法可以在输出的 csv 格式字符串中设置自己的 headers 值。

这是一个错误,我刚刚打开了一个错误报告 here) 所以这将在 2.5.0+ 版本中开箱即用。目前有一个解决方法:

先设置你想要的headers:

String headers[] = {"My", "Custom", "Header"};
csvWriterSettings.setHeaders(headers);

用你的headers写一行到你的输出:

CsvWriter headerWriter = new CsvWriter(stringWriter, csvWriterSettings);
headerWriter.writeRow(headers);

转储 ResultSet:

CsvRoutines csvRoutines = new CsvRoutines(csvWriterSettings);
csvRoutines.write(resultSet, stringWriter);

关闭您创建的编写器以生成 headers:

headerWriter.close();

希望对您有所帮助。