如果我有一个非原始公共成员的类,并且我想用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;
.
.
.
}
CSV文件:
NAME | ADDR1 | ADDR2 | PCODE ...
John Smith |Some place | Some town | NW234
谢谢,
答案 0 :(得分:5)
您是否检查过以下FAQ question?这听起来像是你想要做的。我可能会弄错。
有没有办法将我的CSV文件绑定到 Javabeans列表?
是的。
Kyle Miller添加了一组新课程 允许您将CSV文件绑定到 基于列的JavaBeans列表 名称,列位置或自定义 映射策略。你可以找到新的 在课堂上 au.com.bytecode.opencsv.bean包。 以下是映射到java bean的方法 根据您的现场位置 CSV文件:
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);
答案 1 :(得分: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,这对我来说很好。祝你好运!