OpenCSV CSV到JavaBean

如果我有一个非原始公共成员的类,并且我想用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 

谢谢,

  • 一个

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

有没有办法将我的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); 

我相信你已经很久了,但我遇到了同样的情况,有两种方法可以解决它。 您可以覆盖CsvToBean.convertValue或CsvToBean.getPropertyEditor。

更高级的方法可能是覆盖getPropertyEditor并为您的特定对象返回自定义PropertyEditor。 快速而肮脏的方式是以匿名类forms覆盖convertValue,如下所示:

 CsvToBean csvToBean = new CsvToBean(){ @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,这对我来说很好。 祝你好运!