【问题标题】:OpenCSV CSV to JavaBeanOpenCSV CSV 到 JavaBean
【发布时间】:2010-11-12 14:05:31
【问题描述】:

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

谢谢,

  • 一个

【问题讨论】:

  • 您发布的示例“CSV”文件不是 CSV。 CSV 代表逗号分隔值;看起来您使用的是管道 (|) 而不是逗号。
  • CSV 文件使用逗号 (,) 以外的其他分隔符已经有一段时间了,以使其更加灵活。所以 CSV 中的 C 可以改为 CharacterSeparatedValues。

标签: java csv javabeans opencsv


【解决方案1】:

您是否查看过以下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);

【讨论】:

    【解决方案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 对我来说效果很好。祝你好运!

    【讨论】:

      猜你喜欢
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 2020-04-01
      • 2022-12-07
      • 2018-06-04
      • 2017-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多