读取具有已知列和未知列的CSV文件Java

时间:2019-07-15 06:53:34

标签: java spring csv opencsv

我想知道是否有一种方法可以读取具有已知列和未知列的csv文件。

例如,第一个csv文件中的列是: id,名字,姓氏,城市,国家/地区:unknwon列是城市和国家/地区

第二个csv文件是:

id,名字,姓氏,电话号码 unknwon列为电话号码

我要解析为的对象是:

public class Person {

    Long id;
    String firstname;
    String lastname;

    Map<String,String> additionalInfo;

}

additionalInfo映射将包含“未知”列作为键,并且值将是该列中的行值。

有什么想法吗?

谢谢。

3 个答案:

答案 0 :(得分:0)

OpenCSV允许您使用@CsvBindAndJoinByName注释执行类似的操作。取自the docs

public class Demonstration {

   @CsvBindByName(column = "index")
   private String index;

   @CsvBindAndJoinByName(column = ".*", elementType = String.class)
   private MultiValuedMap<String, String> theRest;

   // Getters and setters go here
}

同一文档提到了一个警告:如果您有多个@CsvBindAndJoinByName,则必须注意不要有重叠的模式,否则结果是不确定的。

答案 1 :(得分:0)

遇到同样的情况,想从 CSV 文件访问未知列。这是解决方案-

`

public class CSVFileDTO {
@CsvBindByName
private String name;

@CsvBindAndJoinByName(column = ".*", elementType = String.class)
private MultiValuedMap<String, String> theRest;

} `

访问其余列的方式 -

    List<CSVFileDTO> resultData;
    MultiValuedMap<String, String> multivaluedMap = resultData.get(0).getTheRest();
    Collection<Map.Entry<String, String>> entries = multivaluedMap.entries();

    for(Map.Entry<String, String> ent : multivaluedMap.entries()){
        entityList.add(ent.getKey());
    }

答案 2 :(得分:0)

检查此 https://github.com/ozlerhakan/poiji API 的功能 9 以读取 excel 文件。

public class MusicTrack {

@ExcelCellName("ID")
private String employeeId;

@ExcelCellName("AUTHOR")
private String author;

@ExcelCellName("NAME")
private String name;

@ExcelUnknownCells
private Map<String, String> unknownCells;}