2016-02-24 6 views
1

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

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

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

ответ

1

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

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

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

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

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

+0

Конечно, я могу это сделать, но на стороне сервера у меня нет файла, но входной поток, и как только я открыл входной поток для проверки заголовка, я не смогу использовать существующую реализацию синтаксического анализа CsvToBean # для анализа данных , – Vinod

+1

Ahhh - потоки. Хорошо, есть способ, но вам нужно подождать, пока после разбора (потому что во время разбора заголовок читается). Таким образом, тот факт, что вы используете HeaderColumnNameTranslateMappingStrategy, означает, что у вас есть карта столбцов - это или вы можете быстро создать подмножество этой карты для требуемых столбцов. Как только синтаксический анализ будет выполнен, вы можете прокрутить имена, а затем вызвать метод getColumnIndex в заголовке HeaderColumnNameTranslateMappingStrategy, передавая реальное имя столбца. Пока вы не возвращаете нулевое целое число, то столбец находится там. –

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

  • Нет связанных вопросов^_^