2015-08-28 1 views
1

Я ищу библиотеку Java, которая может читать/записывать список «простых объектов» из/в CSV-файл.Java POJO в/из CSV, используя имена полей в качестве заголовков столбцов

Давайте определим «простой объект» как POJO, чтобы все его поля были примитивными типами/строками.

Совпадение между полем объекта и столбца CSV должен быть определен в соответствии с имя поля и название (первый ряд) колонны - оба должны быть идентичны. Библиотека не требует дополнительной информации о соответствующей библиотеке! Такая дополнительная сопоставительная информация является ужасным дублированием кода (в отношении определения класса POJO), если вы просто хотите, чтобы заголовки CSV соответствовали именам полей.

Эта последняя функция - это то, что я не смог найти во всех библиотеках, на которые я смотрел: OpenCSV, Super CSV и BeanIO.

Спасибо!

Офер

ответ

1

uniVocity-parsers не требует, чтобы предоставить имена полей в вашем классе, но он использует аннотацию, если вам нужно определить другое имя, или даже манипуляции с данными, которые будут выполняться. Это также намного быстрее, чем другие библиотеки вы пробовали:

class TestBean { 

    @NullString(nulls = { "?", "-" }) // if the value parsed in the quantity column is "?" or "-", it will be replaced by null. 
    @Parsed(defaultNullRead = "0") // if a value resolves to null, it will be converted to the String "0". 
    private Integer quantity; // The attribute name will be matched against the column header in the file automatically. 

    @Trim 
    @LowerCase 
    @Parsed 
    private String comments; 
    ... 

} 

Для разбора:

BeanListProcessor<TestBean> rowProcessor = new BeanListProcessor<TestBean>(TestBean.class); 

CsvParserSettings parserSettings = new CsvParserSettings(); 
parserSettings.setRowProcessor(rowProcessor); 
parserSettings.setHeaderExtractionEnabled(true); 

CsvParser parser = new CsvParser(parserSettings); 

//And parse! 
//this submits all rows parsed from the input to the BeanListProcessor 
parser.parse(new FileReader(new File("/examples/bean_test.csv"))); 

List<TestBean> beans = rowProcessor.getBeans(); 

Раскрытие информации: Я являюсь автором этой библиотеки. Это бесплатно и бесплатно (лицензия Apache V2.0).

Смежные вопросы