OpenCSV memberFieldsToBindTo 不工作 - Java

OpenCSV memberFieldsToBindTo not working - Java

我正在尝试使用 OpenCSV 将 CSV 文件解析为 object 列表,这样我就可以将学生数据加载到我的学生团队分配器系统中。

我一直在'Parsing the records into a Java Object'

标题下关注这个guide

在依赖项出现一些问题后,我让它输出了一个 Student object 列表,但是 CSV 列并未按应有的方式绑定到成员字段。为每个 object 的字段打印测试 returns 空值。

我在 Student 中有两个构造函数,一个用于初始化 3 个字段,另一个为空。我知道目前使用空的,因为删除这个会导致 Student object 中出现 InstantiationExceptions。

CSV 解析器 Class

public class CSVParser {

private static String CSV_FILE_PATH;

public CSVParser(String CSVPath){
    CSV_FILE_PATH = CSVPath; 

    try (
        Reader reader = Files.newBufferedReader(Paths.get(CSV_FILE_PATH));
    ) {
        ColumnPositionMappingStrategy strategy = new ColumnPositionMappingStrategy();
        strategy.setType(Student.class);
        String[] memberFieldsToBindTo = {"fName", "sName", "stuNumber"};
        strategy.setColumnMapping(memberFieldsToBindTo);

        CsvToBean csvToBean = new CsvToBeanBuilder(reader)
                .withMappingStrategy(strategy)
                .withSkipLines(1)
                .withIgnoreLeadingWhiteSpace(true)
                .build();

        List<Student> Students = csvToBean.parse();

        for (Student s : Students) {
            System.out.println("First Name : " + s.getFirstName());
            System.out.println("Second Name : " + s.getSecondName());
            System.out.println("StudentNo : " + s.getStudentNumber());
            System.out.println("---------------------------");
        }
    } catch (IOException ex) {
        Logger.getLogger(CSVParser.class.getName()).log(Level.SEVERE, null, ex);
    }

  }
}

学生Class

public class Student {

private String fName;
private String sName;
private String stuNumber;
private String skill;
private final String[] skills = {"Planning","Writing","Developing"};

public Student(){

}

public Student(String fName, String sName, String stuNumber) {
    this.fName = fName;
    this.sName = sName;
    this.stuNumber = stuNumber;
}

// Setters
public void setSkill(int skillIndex){
    this.skill = skills[skillIndex];
}

public void setFirstName(String fName){
    this.fName = fName;
}

public void setSecondName(String sName){
    this.sName = sName;
}

public void setStudentNumber(String stuNumber){
    this.stuNumber = stuNumber;
}

// Getters
public String getFirstName(){
    return fName;
}

public String getSecondName(){
    return sName;
}

public String getStudentNumber(){
    return stuNumber;
}

// Save to Database
private void saveStudent(){
    // DBConnect db = new DBConnect();

}
}

非空构造函数引发的异常

打印测试在学生字段中显示空值

请告诉我如何让事情变得更清楚,

谢谢。

列映射数组中的名称应响应 setter 的名称而不是字段本身。如果找不到与名称对应的 setter,则无法设置值。