1

我正在使用 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();

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

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

4

1 回答 1

0

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

首先设置您想要的标题:

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

将带有标题的单行写入输出:

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

转储ResultSet

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

关闭您创建的用于生成标头的编写器:

headerWriter.close();

希望这可以帮助。

于 2017-05-22T10:57:18.810 回答