我使用的是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获取列名数组
发布于 2019-03-15 23:09:30
如果需要列名,可以将它们作为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());发布于 2019-03-15 23:59:50
在从MappingIterator获得解析器之前,这些字段不在CsvSchema中
下面是一个工作示例:
CsvSchema schema = (CsvSchema) objectMappingIterator.getParser().getSchema();
Iterator<CsvSchema.Column> iterator = schema.iterator();
while (iterator.hasNext()) {
CsvSchema.Column next = iterator.next();
next.getName();
}https://stackoverflow.com/questions/55185146
复制相似问题