首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jackson-dataformat-csv获取csv的头部

使用jackson-dataformat-csv获取csv的头部
EN

Stack Overflow用户
提问于 2019-03-15 22:45:11
回答 2查看 4K关注 0票数 4

我使用的是jackson-dataformat-csv库。我想解析CSV文件。我有这样的代码:

代码语言:javascript
复制
 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);
        }

我想从这个文件中获取列名。但我不知道该怎么做。我试着:

代码语言:javascript
复制
csvSchema._columns

但是,它是一个空对象。我也这么做:

代码语言:javascript
复制
csvSchema.column(0)

我得到了错误:

代码语言:javascript
复制
Method threw 'java.lang.ArrayIndexOutOfBoundsException' exception.

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-15 23:09:30

如果需要列名,可以将它们作为MappingIterator返回的Map中的键

代码语言:javascript
复制
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());
票数 4
EN

Stack Overflow用户

发布于 2019-03-15 23:59:50

在从MappingIterator获得解析器之前,这些字段不在CsvSchema

下面是一个工作示例:

代码语言:javascript
复制
CsvSchema schema = (CsvSchema) objectMappingIterator.getParser().getSchema();
        Iterator<CsvSchema.Column> iterator = schema.iterator();
        while (iterator.hasNext()) {
            CsvSchema.Column next = iterator.next();
            next.getName();
        }
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55185146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档