如何使用opencsv读取不带标题的csv文件?

时间:2018-10-01 18:38:54

标签: java csv parsing opencsv

我确实知道标头,但是标头是单独解析的。我正在使用带有注释的pojo并将其设置为类型。

我的代码如下:

 CsvToBean<MyObject> bb = new CsvToBeanBuilder<MyObject>(reader)
                .withSeparator(SEPERATOR)
                .withIgnoreLeadingWhiteSpace(true)
                .withType(MyObject.class)
                .build();

当我进行迭代时,我将获得具有所有空值的MyObject。 MyObject是pojo,其中的字段带有列名。

是否可以在opencsv中设置标头?

2 个答案:

答案 0 :(得分:0)

MappingStrategy上有一个CsvToBeanColumnPositionMappingStrategy将允许您按名称将列链接到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);
    }
}

}

仅此而已。