无法使用OpenCSV将JavaBeans写入CSV

3
我将尝试使用OpenCSV将一些数据写入CSV文件。然而,当我尝试存储数据时,我遇到了一个CsvBeanIntrospectionException,随后是NoSuchMethodException:类SubscriberBean上未知属性'Email'。
这是我的JavaBean类的代码:
import com.opencsv.bean.CsvBindByName;

import java.io.Serializable;

public class SubscriberBean implements Serializable {

@CsvBindByName
String Email;

@CsvBindByName
String Name;

public SubscriberBean() {}

public SubscriberBean(String email, String name) {
    this.Email = email;
    this.Name = name;
}

public String getName() {
    return Name;
}

public void setName(String name) {
    Name = name;
}

public String getEmail() {
    return Email;
}

public void setEmail(String email) {
    Email = email;
}

@Override
public String toString() {
    return "SubscriberBean [" + "Email=" + Email + ", Name=" + Name + ']';
}

public Boolean isEmpty() {
    return (this.Name.equals("") || this.Email.equals("") || this.Name == null || this.Email == null);
}

以下是我尝试将数据存储在CSV文件中的代码:

List<SubscriberBean>  lsb = new ArrayList<SubscriberBean>();
.
.
.

    try {
        Writer writer = new FileWriter("test.csv");
        StatefulBeanToCsv beanToCsv = new StatefulBeanToCsvBuilder(writer).build();

        beanToCsv.write(lsb);
        writer.close();
    } catch (CsvDataTypeMismatchException e) {
        e.printStackTrace();
    } catch (CsvRequiredFieldEmptyException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

我检查了JavaBean类,看起来很好。CSV代码与opencsv网站提供的示例几乎相同。

2个回答

2

就快完成了 ;)

Apache BeanUtils期望您的字段以小写字母开头。例如,使用email而不是Email等。这是修正后的SubscriberBean

public class SubscriberBean implements Serializable {

    @CsvBindByName
    String email;

    @CsvBindByName
    String name;

    public SubscriberBean() {
    }

    public SubscriberBean(String email, String name) {
        this.email = email;
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    // ...

}

请注意,由于小写字段的存在,我不得不稍微修改设置器。我添加了this引用:this.email = email;

是的,这样就可以工作了。我一直在按照大写字段的教程操作,这是一个非常愚蠢的错误。谢谢! - nikolak

0
我遇到了同样的异常,因为我的 getters 和 setters 没有被定义。它们也应该被定义。

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