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 .