1

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

所以假设我有一个 Person 类,它有一个 Address 成员,我的 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

谢谢,

  • 一个
4

2 回答 2

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);
    }
};

使用 OpenCSV 2.3 对我来说效果很好。祝你好运!

于 2012-09-13T21:05:57.970 回答
5

您是否查看过以下常见问题解答问题?在我看来,这就是你想要做的。不过我可能弄错了。

有没有办法将我的 CSV 文件绑定到 Javabeans 列表?

就在这里。

Kyle Miller 添加了一组新类,允许您根据列名、列位置或自定义映射策略将 CSV 文件绑定到 JavaBean 列表。您可以在 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 回答