如何使用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上有一个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();
另一答案

正如我在上一篇评论中提到的,我最终实施了一个自定义策略来解决我的问题。

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文件?的主要内容,如果未能解决你的问题,请参考以下文章

CSV , JAVA & HSQLDB

OpenCSV:如何使用自定义列标题和自定义列位置从 POJO 创建 CSV 文件?

java 解析csv

Java:使用OpenCSV解析CSV文件

使用OpenCSV用Java编写CSV文件

使用 spark 读取 csv.file 时如何省略标头?