Получить заголовок csv, используя jackson-dataformat-csv - PullRequest
1 голос
/ 15 марта 2019

Я использую библиотеку jackson-dataformat-csv. Я хочу разобрать CSV файл. У меня есть этот код:

 CsvMapper csvMapper = new CsvMapper();
        CsvSchema csvSchema = csvMapper.typedSchemaFor(Map.class).withHeader();
        List<Map<String, String>> csvRows;
        try {
            MappingIterator<Map<String, String>> it = csvMapper.readerFor(Map.class)
                    .with(csvSchema.withColumnSeparator(';'))
                    .readValues(file.getInputStream());
            csvRows = it.readAll();
        } catch (Exception ex) {
            log.error("Unable to read csv document: ", ex);
        }

Я хочу получить имена столбцов из этого файла. Но я не понимаю, как это сделать. Я стараюсь:

csvSchema._columns

Но, это пустой объект. Я тоже делаю это:

csvSchema.column(0)

Я получаю ошибку:

Method threw 'java.lang.ArrayIndexOutOfBoundsException' exception.

Очевидно, объект столбцов пуст. Зачем? Как получить массив имен столбцов из CSV?

Ответы [ 2 ]

1 голос
/ 15 марта 2019

поля не находятся в CsvSchema, пока вы не получите парсер из MappingIterator

рабочего примера:

CsvSchema schema = (CsvSchema) objectMappingIterator.getParser().getSchema();
        Iterator<CsvSchema.Column> iterator = schema.iterator();
        while (iterator.hasNext()) {
            CsvSchema.Column next = iterator.next();
            next.getName();
        }
0 голосов
/ 15 марта 2019

Если вам нужны имена столбцов, они у вас есть в качестве ключей в Map, возвращаемом MappingIterator:

CsvMapper csvMapper = new CsvMapper();
CsvSchema csvSchema = csvMapper.typedSchemaFor(Map.class).withHeader();

MappingIterator<Map<String, String>> it = csvMapper.readerFor(Map.class)
        .with(csvSchema.withColumnSeparator(','))
        .readValues(csvFile);

System.out.println("Column names: " + it.next().keySet());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...