使用OpenCsv将一个CSV元素映射到一个字符串列表?

问题描述 投票:1回答:1

我有一个CSV文件,用一个空格分隔,就像这样。

<HEADING ROW>
a b c,d,e,f
m n o,p,q

这里,最后一个元素是用逗号分隔符连接的字符串列表。我目前使用的是 OpenCsv 库来将这个CSV文件解析成一个POJO的列表。

这是我对POJO的定义。

import com.opencsv.bean.CsvBindByName;

import java.util.List;

public class Foo {

    @CsvBindByName(column = "heading1", required = true)
    private Long first;

    @CsvBindByName(column = "heading2", required = true)
    private String third;

    @CsvBindByName(column = "heading3", required = true)
    private List<String> fourth;
}

所以这个对象中的所有字段都是不同类型的 尤其是最后一个字段 是列表类型的 可以是任何非零长度的字段 这是我把CSV文件映射到这些对象列表中的代码。

    public List<Foo> readCsvFromPath(final String filePath) throws IOException {
        try (Reader reader = Files.newBufferedReader(Paths.get(filePath));) {
            CsvToBean<Foo> csvToBean = new CsvToBeanBuilder<Foo>(reader)
                    .withSeparator(' ')
                    .withType(Foo.class)
                    .build();
            return csvToBean.parse();
        }
    }

我不确定的是CSV文件的最后一个元素, 即 "c,d,e,f "或 "o,p,q "如何能分别映射到列表中去,如 {"c", "d", "e", "f"}{"o", "p", "q"}?

java csv opencsv
1个回答
0
投票

你可以使用 @CsvBindAndSplitByName.

替换

@CsvBindByName(column = "heading3", required = true)
private List<String> fourth;

@CsvBindAndSplitByName(column = "heading3", required = true, elementType = String.class, splitOn = ",")
private List<String> fourth;
© www.soinside.com 2019 - 2024. All rights reserved.