Автор оригинала: Jean Fernando.
Вступление
Это первая статья в короткой серии, посвященной библиотекам для чтения и записи Csv на Java .
Чтение и запись Csv в ядре Java
Благодаря популярности и широкому использованию CSV в качестве формата для передачи данных, существует множество библиотек синтаксических анализаторов, которые можно использовать наряду с Java.
Сторонние анализаторы определяют общие форматы и способны работать с различными разделителями, обрабатывать специальные символы, а иногда даже считывать недвоичные данные. Однако не всем программам требуются все эти функции, поэтому по-прежнему важно иметь возможность обрабатывать CSV-файлы с помощью ядра Java без использования каких-либо дополнительных библиотек.
Простая комбинация FileReader
, BufferedReader
и String.split()
может облегчить чтение данных из Csv. Давайте рассмотрим шаги , чтобы открыть базовый файл CSV и проанализировать содержащиеся в нем данные:
- Используйте
FileReader
для открытия CSV-файла - Создайте
BufferedReader
и считывайте файл строка за строкой до тех пор, пока не будет достигнут символ “Конец файла” ( EOF ) - Используйте метод
String.split()
для определения разделителя запятых и разделения строки на поля
BufferedReader csvReader = new BufferedReader(new FileReader(pathToCsv)); while ((row = csvReader.readLine()) != null) { String[] data = row.split(","); // do something with the data } csvReader.close();
Массив данных
Строк будет содержать список полей в каждой строке файла, найденного в пути к файлу Csv
. Если файл CSV имеет разделитель, отличный от запятой, его можно указать в методе split
. Например, другим распространенным разделителем является вкладка для файлов с разделенными вкладками значениями (CSV).
Данные могут быть переданы в отдельный метод для обработки или записи в базу данных из цикла или сохранены в коллекции Java для последующего использования. Например, если вы записываете большой объем данных в базу данных, нарушений ограничений (например, нарушений первичного ключа), вызванных человеческими ошибками при создании CSV, можно избежать с помощью хэш-карты. Если в CSV есть повторяющаяся запись, хэш-карта сохранит самую последнюю “прочитанную” и перезапишет предыдущую запись.
Поскольку вы пишете синтаксический анализатор с нуля, вам нужно будет самостоятельно позаботиться о простой обработке ошибок. Например, если вы не уверены, существует ли файл, всегда безопаснее заключить операцию чтения в блок try/catch
или добавить логику для определения существования файла перед обработкой.
Чтобы проверить, существует ли файл, в наш код можно внести следующие изменения:
File csvFile = new File(pathToCsv); if (csvFile.isFile()) { // create BufferedReader and read data from csv }
При некоторой простой обработке ошибок и строгих требованиях к формату CSV создание простого синтаксического анализатора самостоятельно с использованием основных компонентов Java-задача, которую может выполнить большинство программистов.
Написание резюме на языке Java
Большинство сторонних анализаторов также поддерживают запись в CSV-файлы. Однако существует простой способ записи в CSV-файлы, как и в файлы любого другого типа, без использования каких-либо библиотек.
Самый простой способ-использовать объект FileWriter
и обрабатывать файл CSV как любой другой текстовый файл. В нашем примере данные хранятся в некоторых объектах List
, которые мы просто перебираем и добавляем в программу записи:
// Our example data List> rows = Arrays.asList( Arrays.asList("Jean", "author", "Java"), Arrays.asList("David", "editor", "Python"), Arrays.asList("Scott", "editor", "Node.js") ); FileWriter csvWriter = new FileWriter("new.csv"); csvWriter.append("Name"); csvWriter.append(","); csvWriter.append("Role"); csvWriter.append(","); csvWriter.append("Topic"); csvWriter.append("\n"); for (List
rowData : rows) { csvWriter.append(String.join(",", rowData)); csvWriter.append("\n"); } csvWriter.flush(); csvWriter.close();
При использовании пишущей машинки
всегда убедитесь, что вы очистили и закрыли поток. Это повышает производительность операции ввода-вывода и указывает на то, что в выходной поток больше не требуется записывать данные.
Вывод
Существует несколько способов чтения и записи CSV-файлов на Java, самым простым из которых является использование основных компонентов Java. Хотя это также делает вас более уязвимыми для ошибок и будет менее надежным, чем проверенное стороннее решение.
Если вам интересно прочитать о других способах чтения и записи Csv на Java, обязательно ознакомьтесь с другими нашими статьями:
- Чтение и запись Csv на Java с помощью Apache Commons CSV
- Чтение и запись Csv на Java с помощью Opencv