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

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

Автор оригинала: 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