在java中读取包含已知和未知列的CSV文件

ua4mk5z4  于 2023-04-09  发布在  Java
关注(0)|答案(3)|浏览(173)

我想知道是否有一种方法可以读取具有已知和未知列的csv文件。
例如,第一个csv文件中的列为:id,firstname,lastname,city,country未知列是city和country
第二个csv文件是:

id,firstname,lastname,phone number未知列为phone number

我想要解析的对象是:

public class Person {

    Long id;
    String firstname;
    String lastname;

    Map<String,String> additionalInfo;

}

additionalInfoMap将包含“unknown”列作为键,值将是该列中的行值。
有什么想法吗
谢谢。

mfuanj7w

mfuanj7w1#

OpenCSV允许您使用@CsvBindAndJoinByName注解来做类似的事情。摘自文档:

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,你必须小心不要有重叠的模式,否则结果是未定义的。

jdgnovmf

jdgnovmf2#

有同样的情况,想从CSV文件中访问未知列。

public class CSVFileDTO 
{
    @CsvBindByName
    private String name;

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

访问Rest列的方法

CSVReader csvReader = new CSVReader(Files.newBufferedReader(Paths.get("/tmp/data.csv")));
    List<CSVFileDTO> resultData = new CsvToBeanBuilder(csvReader)
            .withType(CSVFileDTO.class)
            .build()
            .parse();

    MultiValuedMap<String, String> multivaluedMap = resultData.get(0).getTheRest();
    for(Map.Entry<String, String> ent : multivaluedMap.entries())
    {
        System.out.println( ent.getKey() + " : " + ent.getValue() );
    }
5n0oy7gb

5n0oy7gb3#

检查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;}

相关问题