1

非プリミティブパブリックメンバーを含むクラスがあり、OpenCSVを使用してCSVファイルからそれらを設定したい場合、どうすればよいですか?OpenCSVにはPropertyDescriptorsに関連する保護されたメンバーがいくつかいることに気付きました

たとえば、Addressメンバーを持つPersonクラスがあり、CSVファイルに住所を含む各個人の詳細が含まれているとします。

Person{

private String name;

private Address al

public void setAddress(Address a){..}
public void setName(String name){..}

}

Addess{

private String line1;
private String line2;
private String postCode;

.
.
.

}

CSVファイル:

NAME        | ADDR1     | ADDR2     | PCODE ...
John Smith  |Some place | Some town | NW234

ありがとう、

  • A
4

2 に答える 2

5

次のFAQの質問を確認しましたか? それがあなたのやりたいことのように思えます。私は間違っているかもしれませんが。

CSV ファイルを Javabeans のリストにバインドする方法はありますか?

はいあります。

Kyle Miller は、列名、列の位置、またはカスタム マッピング戦略に基づいて、CSV ファイルを JavaBeans のリストにバインドできるようにする新しいクラスのセットを追加しました。新しいクラスは au.com.bytecode.opencsv.bean パッケージにあります。CSV ファイル内のフィールド位置に基づいて Java Bean にマップする方法は次のとおりです。

ColumnPositionMappingStrategy strat = new ColumnPositionMappingStrategy(); 
strat.setType(YourOrderBean.class); 
String[] columns = new String[] {"name", "orderNumber", "id"}; // the fields to bind do in your JavaBean 
strat.setColumnMapping(columns); 
CsvToBean csv = new CsvToBean(); 
List list = csv.parse(strat, yourReader);
于 2010-11-12T14:21:17.427 に答える
5

ずいぶん前に先に進んだと思いますが、私は同じ状況に遭遇しました。それを処理する方法は 2 つあります。CsvToBean.convertValue または CsvToBean.getPropertyEditor をオーバーライドできます。

より洗練された方法は、おそらく getPropertyEditor をオーバーライドして、特定のオブジェクトのカスタム PropertyEditor を返すことです。手っ取り早い方法は、convertValue を匿名クラス形式でオーバーライドすることです。次のようにします。

CsvToBean<MyClass> csvToBean = new CsvToBean<MyClass>(){

    @Override
    protected Object convertValue(String value, PropertyDescriptor prop) throws InstantiationException,IllegalAccessException {

        if (prop.getName().equals("myWhatever")) {
            // return an custom object based on the incoming value
            return new MyWhatever((String)value);
        }

        return super.convertValue(value, prop);
    }
};

これは、OpenCSV 2.3 でうまく機能しています。幸運を!

于 2012-09-13T21:05:57.970 に答える