Вступление
Это первая статья из короткой серии, посвященной библиотекам для чтения и записи CSV на Java .
Чтение и запись CSV в Core 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();
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, обязательно ознакомьтесь с другими нашими статьями: