Эта проблема заключается в том, что CsvBeanReader
не преобразует пустой столбец в null
, но в ""
(пустая строка). Поэтому вам действительно нужен процессор ConvertNullTo
, когда записывает CSV-файлы.
Так что вместо
new ConvertNullTo("0", new ParseBigDecimal())
вы должны использовать
new Token("", "0", new ParseBigDecimal()) // replace "" with "0"
Предполагается, что вы хотите BigDecimal со значением ноль для пустых столбцов - если вы хотите, чтобы вместо него было null
, тогда используйте
new Optional(new ParseBigDecimal())
Я признаю, что сайт и javadoc должны сделать это более явным, и над этим я работаю в предстоящем выпуске Super CSV.
Редактировать: Обновление для Super CSV 2.0.0-бета-1
Недавно выпущенный Super CSV 2.0.0-beta-1 включает в себя множество исправлений ошибок и новых функций (включая поддержку Maven и новое расширение Dozer для отображения вложенных свойств и массивов / коллекций). Также изменилась обработка нулей и пустой строки.
В новой версии ""
(пустой столбец) читается как null
, что означает, что теперь вы можете использовать свой исходный код:
new ConvertNullTo("0", new ParseBigDecimal())
В результате этого процессор ячеек Optional()
теперь сопоставляется с null
вместо ""
, что означает, что вы также можете использовать его как процессор ячеек при записи (теперь будет записано значение null
) как ""
).