Редактировать: Обновление для Super CSV 2.0.0-beta-1
Super CSV 2.0.0-beta-1 уже выпущен.Он включает в себя множество исправлений ошибок и новых функций (включая поддержку Maven и новое расширение Dozer для отображения вложенных свойств и массивов / коллекций).
Он также изменил способ обработки пустых (""
) столбцов - онитеперь читаются как null
.Это означает, что поля firstName
и lastName
в вашем компоненте теперь будут null
вместо ""
, если они отсутствуют в файле CSV.
Процессор Optional()
был обновлен, чтобы обслужить это - так что он будет по-прежнему функционировать так же.
Мое предложение использовать Token
больше не актуально: вы должны использовать ConvertNullTo
вместо:
new ConvertNullTo(-1, new ParseInt())
То, что вы действительно хотите, - это Optional
CellProcessor, который будет выполнять следующий процессор в цепочке, только если столбец не 't empty.
Поэтому обновите ваш массив CellProcessor до:
private static final CellProcessor[] cellProcessor = new CellProcessor[] {
null,
null,
new Optional(new ParseInt()),
new ParseDate("yyyyMMdd"),
new ParseBigDecimal()
};
Таким образом, ParseInt
будет выполняться только в том случае, если столбец не пустой (CellProcessors выполняется слева направо),оставив поле int в компоненте со значением по умолчанию, равным 0.
Если вы хотите установить в поле значение -1, чтобы указать, что значение не было предоставлено, то вы можете использовать процессор Token
, который будетзамените любой токен (в данном случае "") на желаемое значение, для любого другого ввода он перейдет к следующему процессору.то есть
new Token("", -1, new ParseInt())
@ Carlo V. Dango CsvListReader - очень примитивная реализация (и вы теряете способность отображать на bean-объекты), поэтому я бы использовал ее только для быстрого и грязного анализа.
И я бы рекомендовал использовать null
в массиве (при чтении) для свойств String, которые не требуют дальнейшей обработки.
Кстати, я работаю над проектом Super CSV для предстоящегорелиз.Я обязательно улучшу примеры кода на веб-сайте, пока я на нем;)