OpenCSV CSV到JavaBean

1 java csv javabeans opencsv

如果我有一个非原始公共成员的类,并且我想用OpenCSV从CSV文件中填充它们,我该怎么做?我注意到OpenCSV有一些与PropertyDescriptors相关的受保护成员

因此,假设我有一个具有地址成员的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;

.
.
.

}
Run Code Online (Sandbox Code Playgroud)

CSV文件:

NAME        | ADDR1     | ADDR2     | PCODE ...
John Smith  |Some place | Some town | NW234
Run Code Online (Sandbox Code Playgroud)

谢谢,

  • 一个

ext*_*eon 5

您是否查看了以下常见问题解答?这听起来像是你想要做的.我可能会弄错.

有没有办法将我的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);
Run Code Online (Sandbox Code Playgroud)

  • 你的读者在这里是什么? (2认同)

Nat*_*ach 5

我相信你已经很久了,但我遇到了同样的情况,有两种方法可以解决它.您可以覆盖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);
    }
};
Run Code Online (Sandbox Code Playgroud)

使用OpenCSV 2.3,这对我来说很好.祝好运!