2016-08-08 7 views
-1

Я использую суперсервер csv для чтения моих файлов csv. Он отлично работает, если совпадают POJO и столбцы.Как игнорировать неизвестный столбец в супер csv

Для примера Мое значение 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 выглядели так, это отлично работает.

Columna, columnB

value1, value2

, но если мои CSV файлы имели дополнительный столбец, он не может с этим исключением проверки, что соответствующий nameMapping элемент совпадает с именем поля в компоненте. Могу ли я избежать этого исключения и просто игнорировать этот столбец. По сути, он говорит, что не может найти соответствующий сеттер.

unknownColumn, Columna, columnB

SomeValue, значение1, значение2

+0

Что такое 'super csv'? –

+0

http://super-csv.github.io/super-csv/index.html – user1364861

+0

Да, у них даже есть пример http://super-csv.github.io/super-csv/examples_reading_variable_cols.html –

ответ

1

Я использовал listReader вместо читателя боба. получил значения столбцов на карте, и я смог сделать что-то вроде этого.

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