当前位置: 首页 > 知识库问答 >
问题:

OpenCSV成员字段ToBindTo不工作-Java

林冥夜
2023-03-14

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

我一直在“将记录解析为Java对象”的标题下遵循本指南

在一些依赖性问题之后,我让它输出一个学生对象列表,但是CSV列没有像应该的那样绑定到成员字段。打印测试为每个对象的字段返回空值。

我在Student中有两个构造函数,一个初始化3个字段,另一个为空。我知道当前使用的是空的,因为删除这个会导致学生对象中的实例化异常。

CSVParser类

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);
    }

  }
}

学生班

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();

}
}

非空构造函数导致的异常

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

请让我知道我怎样才能把事情说得更清楚,

谢谢

共有1个答案

万开畅
2023-03-14

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

 类似资料:
  • 编辑:FXML文件

  • 我正在创建一个用户信息命令,DiscordJS一直在说 我使用的函数是:让target=message。公会成员。getMember(toFind) 我需要更新DiscordJS的新版本吗?我还没有找到任何东西。 谢谢,裘德·威尔逊

  • 我开始使用(不是命令,只有)。最近,我做了一个频道,名字显示了公会的成员数量,每次有人加入或离开都会更新。这是我的代码: 我还添加了命令上,以便bot将该名称编辑为我键入的任何名称。 现在,在添加了一些用于调试的打印后,我发现,\u member\u join()上的上的

  • 我有一个带有varchar类型电子邮件字段的表。 除表中的一封电子邮件外,其他所有电子邮件都能正常工作。

  • 我在使用Guice时遇到空值问题。Nex我向您展示了一个类似场景的示例。我知道字段注入是一种不好的做法,但我希望它在演示中像这样工作 我有具体类命名为B(这是我要注入的一个): 我有一个名为A的抽象类,它有类B(我想通过字段注入注入的那个): 现在是另一个扩展A的具体类C: 我的GUI配置如下: 然后我对斯波克进行了测试: 谢谢:)

  • 我使用的是Selenium Webdriver的最新版本,我需要将一个元素拖放到CKeditor的anotation字段中,但它不是IFrame。根据我之前的测试,它通过机器人拖放功能与Java和Selenium2以及FF47一起工作。 现在,我需要使用最新版本的Selenium with Python3来执行此操作。我输入了这个经过验证的代码,它应该可以工作,但它会用带有拖动链接的holding