如何在Java中将CSV文件映射到POJO类

3

我正在使用Java Maven插件。我想在POJO类中获取employee.csv文件记录。这个POJO类是从employee.csv标题生成的,所有字段都是String类型。现在我想将employee.csv映射到生成的POJO类。我的要求是,我不想手动指定列名。因为如果我更改csv文件,那么我必须再次更改我的代码,所以它应该可以动态地映射任何文件。例如:

firstName,lastName,title,salary 
john,karter,manager,54372

我想将这个映射到我已经拥有的POJO中。

public class Employee
{
  private String firstName;
  private String lastName;
  .
  .
  //getters and setters 
  //toString()
} 

5
可能是如何将定界的扁平文件解析为POJO对象的重复问题。 - dguay
1
请在发布问题之前先在互联网/stackoverflow上搜索。 - sidgate
实际上,我已经查阅了相关资料并进行了谷歌搜索,但没有找到符合我的要求的正确答案。我的问题略有不同,让我详细说明一下。请允许我编辑我的问题。 - Chaitanya Ghumare
2个回答

5

uniVocity-parsers 可以让你轻松地映射你的 pojo。

class Employee {

    @Trim
    @LowerCase
    @Parsed
    private String firstName;

    @Parsed
    private String lastName;

    @NullString(nulls = { "?", "-" }) // if the value parsed in the quantity column is "?" or "-", it will be replaced by null.
    @Parsed(defaultNullRead = "0") // if a value resolves to null, it will be converted to the String "0".
    private Integer salary; // The attribute name will be matched against the column header in the file automatically.
    ...

}

解析:

BeanListProcessor<Employee> rowProcessor = new BeanListProcessor<Employee>(Employee.class);

CsvParserSettings parserSettings = new CsvParserSettings();
parserSettings.setRowProcessor(rowProcessor);
parserSettings.setHeaderExtractionEnabled(true);

CsvParser parser = new CsvParser(parserSettings);

//And parse!
//this submits all rows parsed from the input to the BeanListProcessor
parser.parse(new FileReader(new File("/path/to/your.csv"))); 

List<Employee> beans = rowProcessor.getBeans();

声明:本库的作者为我。它是开源且免费(采用Apache V2.0许可证)。


-2

你可以使用openCSV jar包来读取数据,然后将每个列的值映射到类属性上。 由于安全原因,我不能与你分享我的代码。


请问您能否详细说明一下? - Chaitanya Ghumare
当您读取CSV文件时,根据我的理解它将以""分隔,因此您可以使用它的类来打破它 点击这里 - mayank agrawal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接