我想知道是否有一种方法可以读取具有已知列和未知列的csv文件。
例如,第一个csv文件中的列是: id,名字,姓氏,城市,国家/地区:unknwon列是城市和国家/地区
第二个csv文件是:
id,名字,姓氏,电话号码 unknwon列为电话号码
我要解析为的对象是:
public class Person {
Long id;
String firstname;
String lastname;
Map<String,String> additionalInfo;
}
additionalInfo映射将包含“未知”列作为键,并且值将是该列中的行值。
有什么想法吗?
谢谢。
答案 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;}