Перейти к основному содержимому

Чтение файла CSV в массив

· 2 мин. чтения

1. Обзор

Проще говоря, файл CSV (значения, разделенные запятыми) содержит упорядоченную информацию, разделенную запятой.

В этом руководстве мы рассмотрим различные способы чтения CSV-файла в массив.

2. BufferedReader в java.io

Во-первых, мы будем читать записи построчно, используя readLine() в BufferedReader .

Затем мы разделим строку на токены на основе разделителя-запятой:

List<List<String>> records = new ArrayList<>();
try (BufferedReader br = new BufferedReader(new FileReader("book.csv"))) {
String line;
while ((line = br.readLine()) != null) {
String[] values = line.split(COMMA_DELIMITER);
records.add(Arrays.asList(values));
}
}

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

3. Сканер в java.util

Далее мы собираемся использовать java.util.Scanner для просмотра содержимого файла и последовательного извлечения строк, одну за другой:

List<List<String>> records = new ArrayList<>();
try (Scanner scanner = new Scanner(new File("book.csv"));) {
while (scanner.hasNextLine()) {
records.add(getRecordFromLine(scanner.nextLine()));
}
}

Затем мы проанализируем строки и сохраним их в массиве:

private List<String> getRecordFromLine(String line) {
List<String> values = new ArrayList<String>();
try (Scanner rowScanner = new Scanner(line)) {
rowScanner.useDelimiter(COMMA_DELIMITER);
while (rowScanner.hasNext()) {
values.add(rowScanner.next());
}
}
return values;
}

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

4. ОпенCSV

Мы можем работать с более сложными файлами CSV с помощью OpenCSV.

OpenCSV — это сторонняя библиотека, предоставляющая API для работы с CSV-файлами.

Мы будем использовать метод readNext() в CSVReader для чтения записей в файле:

List<List<String>> records = new ArrayList<List<String>>();
try (CSVReader csvReader = new CSVReader(new FileReader("book.csv"));) {
String[] values = null;
while ((values = csvReader.readNext()) != null) {
records.add(Arrays.asList(values));
}
}

Чтобы углубиться и узнать больше об OpenCSV, ознакомьтесь с нашим руководством по OpenCSV .

5. Вывод

В этой быстрой статье мы рассмотрели различные способы чтения CSV-файлов в массив.

Как всегда, полный исходный код примеров доступен на GitHub .