java - 使用 jackson-dataformat-csv 获取 csv header

标签 java csv jackson

我使用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.

显然,columns 对象是空的。为什么?如何从 CSV 获取列名称数组?

最佳答案

如果您需要列名称,请将它们作为 MappingIterator 返回的 Map 中的键:

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

关于java - 使用 jackson-dataformat-csv 获取 csv header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55185146/

相关文章:

Java 和动态类型

Python、CSV、根据内容跳行

java - CSVPrinter 仅从标题中删除引号

php - 使用php导入csv并更新mysql中的记录

spring-mvc - 如何设置/配置 Jackson 注释以在 Spring MVC 中工作?

java - Spring 框架是否因 Jackson 依赖而容易受到攻击

java游戏循环 Sprite map 渲染

java - Android BLE 重新订阅特性

java - Jackson - 双向 - 反序列化父 ID

java - 如何在 Spring Rest Call 中使用 GridFS 从 Mongodb 发送和检索图像?