簡體   English   中英

無法使用 OpenCSV 將 JavaBeans 寫入 CSV

[英]Can't write JavaBeans to CSV using OpenCSV

我正在嘗試使用 OpenCSV 將一些數據寫入 CSV 文件。 但是,當我嘗試存儲數據時,我得到一個CsvBeanIntrospectionException后跟一個NoSuchMethodException: Unknown property 'Email' on class 'class SubscriberBean'

這是我的 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 網站上提供的示例幾乎相同。

快到了 ;)

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;

由於 getter 和 setter,我有同樣的例外。 他們也應該被定義

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM