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

Введение Это первая статья из короткой серии, посвященной библиотекам для чтения и записи CSV на Java [/ библиотеки-для-чтения-и-записи-csvs-in-java]. Чтение и запись CSV в Core Java Благодаря популярности и широкому использованию CSV в качестве формата для передачи данных существует множество библиотек синтаксического анализатора, которые можно использовать вместе с Java. Сторонние парсеры определяют общие форматы и могут работать с различными разделителями, обрабатывать специальные символы, а иногда даже читать не-b

Вступление

Это первая статья из короткой серии, посвященной библиотекам для чтения и записи CSV на Java .

Чтение и запись CSV в Core Java

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

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

Простая комбинация FileReader , BufferedReader и String.split() может облегчить чтение данных из CSV. Давайте рассмотрим шаги, чтобы открыть базовый файл CSV и проанализировать содержащиеся в нем данные:

  • Используйте FileReader чтобы открыть файл CSV
  • Создайте BufferedReader и прочитайте файл построчно, пока не будет достигнут символ «Конец файла» ( EOF).
  • Используйте метод String.split() чтобы определить разделитель запятой и разделить строку на поля.
1
<!-- -->
 BufferedReader csvReader = new BufferedReader(new FileReader(pathToCsv)); 
 while ((row = csvReader.readLine()) != null) { 
 String[] data = row.split(","); 
 // do something with the data 
 } 
 csvReader.close(); 

data будет содержать список полей в каждой строке файла, найденного в расположении файла pathToCsv Если в CSV-файле есть разделитель, отличный от запятой, его можно указать в методе split Например, еще одним распространенным разделителем является вкладка для файлов TSV (Tab-Separated-Value).

Данные могут быть переданы в отдельный метод для обработки или записи в базу данных из цикла или сохранены в коллекции Java для дальнейшего использования. Например, если вы записываете большой объем данных в базу данных, нарушений ограничений (например, нарушений первичного ключа), вызванных человеческими ошибками при создании CSV, можно избежать с помощью хэш-карты. Если в CSV есть повторяющаяся запись, хэш-карта сохранит самое последнее «прочитанное» и перезапишет предыдущую запись.

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

Чтобы проверить, существует ли файл, в наш код можно внести следующие изменения:

 File csvFile = new File(pathToCsv); 
 if (csvFile.isFile()) { 
 // create BufferedReader and read data from csv 
 } 

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

Написание CSV на Core Java

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

Самый простой способ - использовать FileWriter и обрабатывать файл CSV как любой другой текстовый файл. В нашем примере данные хранятся в некоторых List , которые мы просто перебираем и добавляем в средство записи:

 // Our example data 
 List<List<String>> 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<String> rowData : rows) { 
 csvWriter.append(String.join(",", rowData)); 
 csvWriter.append("\n"); 
 } 
 
 csvWriter.flush(); 
 csvWriter.close(); 

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

Заключение

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

Если вам интересно узнать о других способах чтения и записи CSV на Java, обязательно ознакомьтесь с другими нашими статьями:

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus