Set custom headers in output CSV using Univocity

1.1k Views Asked by At

I'm using Univocity for converting Resultset to String in CSV format using below code:

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();

I'm trying to set custom headers in the output, but the returned output always has a default header.

Is there any way I could set my own headers values in the output csv format string.

1

There are 1 best solutions below

1
On BEST ANSWER

It's a bug and I just opened a bug report here) so this will work out of the box in version 2.5.0+. Currently there's a workaround for it:

Set the headers you want first:

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

Write a single row with your headers to your output:

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

Dump the ResultSet:

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

Close that writer you created to generate the headers:

headerWriter.close();

Hope this helps.