Рубрики
Без рубрики

Библиотеки для чтения и записи Csv на Java

Автор оригинала: Jean Fernando.

Вступление

CSV означает Значения , разделенные запятыми , метод форматирования данных, который использовался еще до того, как использование персональных компьютеров получило широкое распространение. Формат приобрел популярность, потому что первые компьютеры использовали перфокарты для обработки данных, и значения, разделенные запятыми, легче “пробивать”, чем традиционные данные в табличном формате в фиксированных столбцах.

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

Формат CSV обычно состоит из информации, организованной строками, состоящими из нескольких полей, разделенных разделителем, причем одна строка эквивалентна одной записи данных. Разделителем может быть запятая, точка с запятой или символ табуляции. Определенного формата не существует, хотя спецификация под названием RFC 4180 была введена в попытке стандартизировать, как в идеале должен вести себя файл CSV.

RFC 4180

“RFC” означает Запрос комментариев , что означает, что документ просто должен представлять собой набор общих спецификаций или руководящих принципов, а не принятых правил.

Существует множество отклонений от указанного формата в способе создания и чтения CSV-файлов современными приложениями, но большинство систем придерживаются первоначальных рекомендаций, изложенных в RFC 4180.

Согласно RFC 4180, CSV-файлы должны иметь следующие общие черты:

  • Каждая запись должна быть в отдельной строке с разрывом символов в конце строки.
  • Там может быть или не быть строки заголовка. Наличие заголовка может быть указано в параметре заголовок типа MIME|/. Тип MIME для CSV-файлов, официально зарегистрированных в
  • IANA , – “текст/csv”. Каждая запись может состоять из одного или нескольких полей, разделенных запятыми, и одинаковое количество полей должно сохраняться во всем файле (во всех записях должно быть одинаковое количество полей).
  • Если поле содержит запятые, разрывы строк или двойные кавычки, оно само должно быть заключено в двойные кавычки.

Зачем использовать Css для операций ввода-вывода с Java

CSV-файлы удобочитаемы для человека и проще для понимания, чем другие форматы передачи данных, такие как XML или JSON .

Файлы CSV можно импортировать в большинство приложений для работы с электронными таблицами, таких как Excel , Google Sheets и OpenOffice Calc , и их легко создавать – существующий файл .xls или .xlsx может быть преобразован в формат CSV в самом Excel, если файл содержит только символы, а не макросы, изображения и т. Д.

Формат компактен и обычно меньше по размеру, что приводит к более быстрой обработке и генерации. Для сравнения, XML требует повторения; обычно имя заголовка столбца повторяется дважды для каждой строки с тегами начала и конца (вместе с символами, связанными с синтаксисом), в то время как CSV требует заголовков столбцов только один раз, обычно в самой первой строке.

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

Чтение и запись Csv в ядре Java

Благодаря популярности и широкому использованию CSV в качестве формата для передачи данных, существует множество библиотек синтаксических анализаторов, которые можно использовать наряду с Java.

Сторонние анализаторы определяют общие форматы и способны работать с различными разделителями, обрабатывать специальные символы, а иногда даже считывать недвоичные данные. Однако по-прежнему важно уметь обрабатывать CSV-файлы с помощью ядра Java без использования каких-либо дополнительных библиотек.

Простая комбинация FileReader , BufferedReader и String.split() может облегчить чтение данных из Csv.

  • Чтение и запись Csv Java

Чтение и запись Csv с помощью Apache Commons CSV

Библиотека Apache Commons CSV – это версия анализатора CSV Java от Apache Software Foundation. Согласно резюме проекта , он пытается ” предоставить простой интерфейс для чтения и записи CSV-файлов различных типов “.

Как и все библиотеки, связанные с Apache , он работает с лицензией Apache , что означает, что его можно свободно использовать, распространять и изменять.

  • Чтение и запись Csv на Java с помощью Apache Commons CSV

Чтение и запись Csv с помощью Opencv

OpenCSV является одним из самых простых и простых для понимания парсеров CSV, использующих стандартные классы Reader //Writer и предлагающих реализацию CSVReader сверху.

Как и файл CSV Apache Commons, OpenCSV работает с лицензией Apache 2.0. Перед загрузкой и принятием решения об использовании анализаторов Opencsv вы можете просмотреть исходный код и Javadocs и даже проверить их набор тестов JUnit, который включен в их репозиторий git.

  • Чтение и запись Csv на Java с помощью Opencv

Сторонние библиотеки для операций ввода-вывода CSV

Знание того, как читать и записывать CSV-файл в основной Java, важно и обычно достаточно для большинства основных операций. Однако бывают случаи, когда лучше всего полагаться на стороннюю библиотеку.

Например, наше собственное использование split для анализа CSV-файла без использования библиотек выше приведет к ошибке, если сами поля будут содержать запятые. Мы могли бы расширить нашу логику, чтобы соответствовать этому сценарию, но зачем изобретать велосипед, когда уже есть проверенные решения, доступные для использования?

Именно здесь появляются библиотеки – большинство из них поддерживают различные конфигурации и идентифицируют escape-символы и символы конца файла, часто используемые различными системами, наборами продуктов и базами данных, так что нам не нужно отслеживать, внедрять и тестировать каждую конфигурацию самостоятельно.

Существует множество различных библиотек синтаксического анализа, доступных бесплатно, каждая из которых обладает различными преимуществами. Давайте рассмотрим некоторые из наиболее популярных библиотек для анализа CSV с помощью Java, сравнив их плюсы и минусы.

Другие библиотеки CSV

В дополнение к CSV Apache Commons и OpenCSV, для использования доступно множество других анализаторов CSV. Давайте быстро взглянем на некоторые другие библиотеки и сравним их использование , преимущества и недостатки:

Суперсв

SuperCSV – еще одна доминирующая библиотека анализа CSV. Реализация SuperCSV поддерживает форматы, которые не рассматриваются другими основными анализаторами.

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

Подобно методам аннотации OpenCSV, SuperCSV предлагает поддержку POJO для работы с JavaBeans в дополнение к обычным спискам и картам.

Кодирование и декодирование также обрабатываются библиотекой, если файл соответствует формату, указанному в спецификации SuperCSV . Если файл не соответствует требованиям, вы все равно можете определить пользовательский разделитель, символ кавычки или символ новой строки по мере необходимости или расширить исходный код для выполнения конкретных требований.

Синтаксический анализ упрощается за счет опций форматирования данных, доступных в SuperCSV, которые позволяют обрезать и заменять регулярные выражения во время обработки. Библиотека также поддерживает потоковый ввод и вывод, что делает ее управляемой с точки зрения производительности и систем с ограниченным объемом памяти.

Библиотека SuperCSV также позволяет частичное чтение и частичную запись, что не поддерживается другими анализаторами CSV, которые мы обсуждали в этой статье. Вы можете установить для определенных значений столбцов заголовка значение null и продолжить обработку оставшихся столбцов или написать набор данных, содержащий необязательные значения, без добавления собственной обработки ошибок.

Большим недостатком, заслуживающим упоминания, является то, что библиотека, похоже, не поддерживается – дата последней публикации четыре года назад – в 2015 году, хотя в репозитории git есть более свежие материалы.

Анализатор CSV однозначности

Анализатор CSV UniVocity громко утверждает, что является самым быстрым анализатором CSV в сравнении 2018 года среди 18 различных общедоступных анализаторов CSV. Анализатор однозначности позволяет вам выбирать поля, которые вы хотите проанализировать, пропуская ненужные или необязательные поля в одном файле, предоставляя ему возможность фильтровать столбцы CSV.

Он имеет больше возможностей настройки, чем OpenCSV и CSV Apache Commons, что затрудняет его настройку и начало работы. Читаемость кода также может быть ниже по сравнению с некоторыми другими библиотеками, поскольку анализатор однозначности требует, чтобы перед попыткой анализа были объявлены формат, разделитель строк и метод извлечения заголовка.

С положительной стороны, разнообразие параметров форматирования и настройки делает его подходящим для работы с “крайними случаями”, связанными с CSV-файлами, которые не соответствуют RFC4180.

Аналогично CSV Opencv и Apache Commons, вы можете использовать либо итератор, либо определенный класс синтаксического анализатора (в данном случае либо CsvParser , либо TsvParser ). Анализаторы CSV UniVocity также поддерживают чтение в бобы с более сложной настройкой по сравнению с OpenCSV.

Написание-это такой же сложный, но настраиваемый процесс с помощью анализатора CSV UniVocity, с конкретными случаями использования, такими как возможность определения преобразования значений и выбора столбцов. Также поддерживается запись непосредственно с карты или аннотированных Java-компонентов.

Анализатор CSV FlatPack

Анализатор CSV FlatPack быстр и более подходит для обработки очень больших файлов, обработки сортировки файлов перед анализом и анализа с фиксированной шириной. Его можно использовать в сценарии, когда ваш CSV-файл не имеет определенного разделителя, но, например, состоит из текста фиксированной ширины. Анализатор также поддерживает сопоставление столбцов с помощью спецификаций XML, где поля в XML и поля данных в CSV расположены в одном порядке.

Фабрика разделителей BuffReader позволяет передавать потоковые файлы большего размера, чтобы избежать всего, что содержится в памяти при анализе данных. Столбцы также можно добавлять, удалять или игнорировать по мере необходимости.

Поскольку библиотека ориентирована на удобство работы с файлами большего размера, она также позволяет исключать неверные данные и добавлять их в коллекцию ошибок для последующей обработки. Это позволяет избежать необходимости повторной обработки большого набора данных из-за одной или двух ошибок и упрощает обработку ошибок.

Библиотека в настоящее время поддерживается, а последняя публикация-в 2019 году. У него есть определенные преимущества, но его может быть сложно настроить и понять из-за множества опций и функций настройки, введенных для обработки очень специфических сценариев, которые не соответствуют стандарту RFC4180.

Вывод

Самые простые сценарии чтения и записи CSV могут быть обработаны с помощью core Java IO с BufferedReader s , пишущей машинкой s и настраиваемой обработкой ошибок. Однако внешние библиотеки предоставляют проверенные и проверенные решения, когда речь заходит о более сложных операциях, связанных с поддержкой файлов большего размера, которые могут соответствовать или не соответствовать стандарту RFC 4180, с различными разделителями и различными требованиями.

Производительность и гибкость вашего приложения зависят от выбранного вами варианта – некоторые анализаторы лучше справляются с управлением памятью, в то время как другие более гибкие и настраиваемые.

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