【问题标题】:how to ignore an unknown column in super csv如何忽略超级csv中的未知列
【发布时间】:2016-08-08 02:13:19
【问题描述】:

我正在使用超级 csv 的 bean reader 来读取我的 csv 文件。如果 POJO 和列匹配,它工作正常。

例如,我的 pojo 具有这些值。

//They have getters and setters.
//just to make it simple I have used public.
public myPojo
{
 public columnA;
 public columnB;
}

我的超级 csv 代码如下所示。

        final String[] header = beanReader.getHeader(true);
        int amountOfColumns=beanReader.length();
        CellProcessor[] processor = new CellProcessor[amountOfColumns];

所以如果我的 csv 文件看起来像这样,它可以正常工作。

A 列、B 列

值1,值2

但是如果我的 csv 文件有一个额外的列,它会因为这个异常而失败 检查相应的 nameMapping 元素是否与 bean 中的字段名称匹配。我可以避免这个异常而忽略这个列。基本上它说它找不到相应的setter。

unknownColumn,columnA,columnB

一些值,值1,值2

【问题讨论】:

标签: java csv supercsv


【解决方案1】:

我使用 listReader 而不是 bean reader。将列值映射到地图,我能够做这样的事情。

protected MyPojo getBeanFromMap(MyPojo MyPojo, Class objClass,
                                    Map<String, String> rowMap)
        throws NoSuchFieldException, IllegalAccessException
{
    Field[] fields = objClass.getFields();
    for(Field f : fields){
        String fieldName = f.getName();
        String value = rowMap.get(fieldName);
        MyPojo.setField(fieldName, value);
    }
    return  MyPojo;
}

public void setField(String fieldName, Object value)
        throws NoSuchFieldException, IllegalAccessException
{
    Field field = getClass().getDeclaredField(fieldName);
    field.set(this, value);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-21
    • 2017-10-01
    • 2019-09-16
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    相关资源
    最近更新 更多