如何使用opencsv读取没有标头的csv文件?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用opencsv读取没有标头的csv文件?相关的知识,希望对你有一定的参考价值。
我知道标题,但标题是单独解析的。我正在使用带注释的pojo并将其设置为类型。
我的代码看起来像这样:
CsvToBean<MyObject> bb = new CsvToBeanBuilder<MyObject>(reader)
.withSeparator(SEPERATOR)
.withIgnoreLeadingWhiteSpace(true)
.withType(MyObject.class)
.build();
当我迭代时,我得到所有空值的MyObject。 MyObject是带有用列名注释的字段的pojo。
有没有办法在opencsv中设置标头?
答案
在MappingStrategy
上有一个CsvToBean
。 ColumnPositionMappingStrategy
将允许您按名称将列链接到bean属性。
例如:
CsvToBean<MyObject> bb = new CsvToBeanBuilder<MyObject>(reader)
.withSeparator(SEPERATOR)
.withIgnoreLeadingWhiteSpace(true)
.withType(MyObject.class)
.build();
ColumnPositionMappingStrategy<MyObject> mappingStrategy = new ColumnPositionMappingStrategy<>();
mappingStrategy.setType(MyObject.class);
mappingStrategy.setColumnMapping("property1", "property2");
bb.setMappingStrategy(mappingStrategy);
bb.parse();
另一答案
正如我在上一篇评论中提到的,我最终实施了一个自定义策略来解决我的问题。
public class BlahMappingStrategy extends HeaderColumnNameMappingStrategy {
List<String> headerList;
public BlahMappingStrategy(List<String> headerList) {
this.headerList = headerList;
}
@Override
public void captureHeader(CSVReader reader) throws IOException, CsvRequiredFieldEmptyException {
if (this.type == null) {
throw new IllegalStateException(ResourceBundle.getBundle("opencsv", this.errorLocale).getString("type.unset"));
} else {
String [] header = headerList.toArray(new String[headerList.size()]);
this.headerIndex.initializeHeaderIndex(header);
}
}
}
这就是所需要的一切。
以上是关于如何使用opencsv读取没有标头的csv文件?的主要内容,如果未能解决你的问题,请参考以下文章