OpenCSV CSV в JavaBean - PullRequest
       39

OpenCSV CSV в JavaBean

1 голос
/ 12 ноября 2010

Если у меня есть класс с не примитивными открытыми членами, и я хочу заполнить их из файла CSV с помощью OpenCSV, как я могу это сделать? Я заметил, что в 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

Спасибо

  • A

Ответы [ 2 ]

5 голосов
/ 14 сентября 2012

Я уверен, что вы уже давно ушли, но я столкнулся с той же ситуацией, и есть два способа справиться с этим.Вы можете либо переопределить 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.Удачи!

5 голосов
/ 12 ноября 2010

Вы проверяли следующий вопрос FAQ ?Для меня это звучит так, как будто ты хочешь.Хотя я могу ошибаться.

Есть ли способ привязать мой CSV-файл к списку Javabeans?

Да, есть.

Кайл Миллер добавил новый набор классов, чтобы позволить вам связывать файл CSV со списком JavaBeans на основе имени столбца, положения столбца или пользовательской стратегии отображения,Вы можете найти новые классы в пакете au.com.bytecode.opencsv.bean.Вот как вы можете отобразить Java-бин, основываясь на позициях полей в вашем 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);
...