2016-02-23 4 views
0

У меня есть файл CSV в этом формате RES,2016-02-23_18:01:27, и я хочу сопоставить значения с bean-компонентом, который имеет атрибуты типа . При написании метода процессора ячеек существует способ разбора значения в Date как ParseDate(). Здесь это приводит к ошибке, так как синтаксический анализатор возвращает объект Date, и у меня есть объект 3 в моем bean-компоненте.поддержка Calendar в SuperCSV

Чтобы преодолеть это, я создал перегруженный метод установки в моем компоненте, как показано ниже:

public void setDate(Date date) { 
    this.date = new GregorianCalendar(); 
    this.date.setTime(date); 
} 

Вот мой CellParser метод:

private static CellProcessor[] getProcessors() { 
    final CellProcessor[] processors = new CellProcessor[] { 
     new StrRegEx("\\w{3}"), // string value check 
     new ParseDate("yyyy-MM-dd_HH:mm:ss"), // date 
    }; 
    return processors; 
} 

Есть ли нативная поддержка. Я посмотрел на официальный сайт, и это примеры. Не удалось найти ссылки, связанные с Calendar. Если нет встроенной поддержки от SuperCSV, это лучший способ преодолеть эту проблему?

ответ

1

Самый простой способ - написать свой собственный custom cell processor.

Например, вы можете связать следующий процессор после ParseDate, чтобы преобразовать его в Calendar.

public class DateToCalendar extends CellProcessorAdaptor implements DateCellProcessor { 

    public DateToCalendar() { 
    } 

    public DateToCalendar(final CellProcessor next) { 
     super(next); 
    } 

    public Object execute(final Object value, final CsvContext context) { 
     validateInputNotNull(value, context); 

     if(!(value instanceof Date)) { 
      throw new SuperCsvCellProcessorException(Date.class, value, context, this); 
     } 

     Calendar result = Calendar.getInstance(); 
     result.setTime((Date) value); 

     return next.execute(result, context); 
    } 
} 

Например,

final CellProcessor[] processors = new CellProcessor[] { 
     new StrRegEx("\\w{3}"), // string value check 
     new ParseDate("yyyy-MM-dd_HH:mm:ss", new DateToCalendar()) // date 
    };