我使用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);
}
Run Code Online (Sandbox Code Playgroud)
我想从这个文件中获取列名。但我不明白如何制作。我尝试:
csvSchema._columns
Run Code Online (Sandbox Code Playgroud)
但是,它是空对象。我也是这样做的:
csvSchema.column(0)
Run Code Online (Sandbox Code Playgroud)
我得到错误:
Method threw 'java.lang.ArrayIndexOutOfBoundsException' exception.
Run Code Online (Sandbox Code Playgroud)
显然,列对象是空的。为什么?我如何从中获取列名数组CSV?
如果您需要列名,请将它们作为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());
Run Code Online (Sandbox Code Playgroud)
字段是不是CsvSchema直到你从分析器MappingIterator
一个工作示例:
CsvSchema schema = (CsvSchema) objectMappingIterator.getParser().getSchema();
Iterator<CsvSchema.Column> iterator = schema.iterator();
while (iterator.hasNext()) {
CsvSchema.Column next = iterator.next();
next.getName();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3532 次 |
| 最近记录: |