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

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

1. обзор

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

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

2. BufferedReader вjava.io

Сначала мы прочитаем записи построчно, используяreadLine() вBufferedReader. Затем мы разделим строку на токены в соответствии с разделителем-запятой.

List> 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. Scanner вjava.util

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

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

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

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

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

4. OpenCSV

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

OpenCSV is a third party library which provides an API to work with CSV files. Мы будем использовать методreadNext() вCSVReader для чтения записей в файле:

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

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

5. Заключение

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

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