Как прочитать CSV-файл без заголовка с помощью OpenCSV? - PullRequest
0 голосов
/ 01 октября 2018

Я знаю заголовок, но заголовок анализируется отдельно.Я использую pojo с аннотациями и задаю его как тип.

Мой код выглядит так:

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

Когда я выполняю итерацию, я получаю MyObject со всеми нулевыми значениями.MyObject - это pojo с полями, аннотированными именами столбцов.

Есть ли способ установить заголовки в opencsv?

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Как я уже упоминал в своем последнем комментарии, я решил применить собственную стратегию для решения своей проблемы.

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);
    }
}

}

Это все, что было нужно.

0 голосов
/ 01 октября 2018

На CsvToBean есть MappingStrategy.ColumnPositionMappingStrategy позволит вам связать столбцы со свойствами бина по имени.

Например:

    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();
...