Установите пользовательские заголовки в выходной CSV с помощью 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();

Я пытаюсь установить пользовательские заголовки в выводе, но возвращаемый вывод всегда имеет заголовок по умолчанию.

Могу ли я каким-либо образом установить свои собственные значения заголовков в выходной строке формата csv.


person HyperioN    schedule 18.05.2017    source источник


Ответы (1)


Это ошибка, и я только что открыл отчет об ошибке здесь), так что это сработает. из коробки в версии 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();

Надеюсь это поможет.

person Jeronimo Backes    schedule 22.05.2017
comment
Спасибо, что поделились обходным решением, но у него есть проблема. headerWriter.writeRow(headers) запишет заголовки со значениями, разделенными запятыми, но это неверно, если вы используете другой разделитель в csvWriterSettings.getFormat().setDelimiter(). - person HyperioN; 01.06.2017