Как проверить заголовки csv с помощью opencsv

Я использую opencsv для анализа данных файла csv, которые были загружены через Интернет, и заполнения прочитанных данных в bean-компоненте (используя HeaderColumnNameTranslateMappingStrategy), который работает нормально.

Но изо всех сил пытаюсь найти лучший способ проверить (в качестве первой проверки), есть ли в файле все заголовки, прежде чем начинать обработку данных.

Opencsv по-прежнему обрабатывает файл и заполняет нулевые значения в bean-компоненте, если в файле нет всех заголовков, которые были переданы в виде карты columnsMapping.


person Vinod    schedule 24.02.2016    source источник


Ответы (1)


Таким образом, учитывая файл CSV, вы хотите убедиться, что заголовок содержит набор необходимых элементов перед обработкой.

Я бы создал служебный класс с методом readHeader, который берет имя файла и с помощью CSVReader читает заголовок, используя readNext() как массив строк (вместо того, чтобы пропускать его) и возвращает его.

Затем вы можете добавить второй метод, который берет этот массив и массив или список обязательных полей, а затем использует что-то вроде Apache Commons ArrayUtils убедитесь, что каждый элемент в требуемом массиве находится в массиве заголовков и возвращает true, если да, иначе false.

Затем, если вы хотите, вы можете создать третий метод, который объединяет два, чтобы скрыть сложность.

Надеюсь, это поможет.

person Scott Conway    schedule 24.02.2016
comment
Конечно, я могу это сделать, но на стороне сервера у меня есть не файл, а поток ввода, и как только я открою поток ввода для проверки заголовка, я не смогу использовать существующую реализацию CsvToBean#parse для анализа данных. - person Vinod; 25.02.2016
comment
Аааа - потоки. Хорошо, есть способ, но вам нужно подождать до завершения синтаксического анализа (потому что именно во время синтаксического анализа читается заголовок). Таким образом, тот факт, что вы используете HeaderColumnNameTranslateMappingStrategy, означает, что у вас есть карта столбцов — это или вы можете быстро создать подмножество этой карты для необходимых столбцов. После завершения синтаксического анализа вы можете просмотреть имена, а затем вызвать метод getColumnIndex для HeaderColumnNameTranslateMappingStrategy, передав реальное имя столбца. Пока вы не вернете нулевое целое число, столбец будет там. - person Scott Conway; 25.02.2016