2017-09-20 9 views
1

OpenCSVを使用してCSVファイルにデータを書き込もうとしています。しかし、データを保存しようとすると、CsvBeanIntrospectionExceptionに続いてが返されます。OpenCSVを使用してJavaBeansをCSVに書き込めません

はここに私の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

;)

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;

+0

はい、それは動作するようになっています。私はフィールドが大文字であるチュートリアルに従っていました。かなり愚かな間違い。ありがとうございました! – nikolak

関連する問題