我确实知道标头,但是标头是单独解析的。我正在使用带有注释的pojo并将其设置为类型。
我的代码如下:
CsvToBean<MyObject> bb = new CsvToBeanBuilder<MyObject>(reader)
.withSeparator(SEPERATOR)
.withIgnoreLeadingWhiteSpace(true)
.withType(MyObject.class)
.build();
当我进行迭代时,我将获得具有所有空值的MyObject。 MyObject是pojo,其中的字段带有列名。
是否可以在opencsv中设置标头?
答案 0 :(得分:0)
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();
答案 1 :(得分:0)
正如我在上一条评论中提到的那样,我最终实施了自定义策略来解决我的问题。
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);
}
}
}
仅此而已。