Работа с CSV в Java: полное руководство по чтению и записи

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с CSV в Java: полное руководство

CSV (Comma-Separated Values) — один из самых популярных форматов для хранения и обмена табличными данными. В Java существует несколько способов работы с CSV-файлами: от ручного парсинга до использования специализированных библиотек. В этой статье мы рассмотрим основные подходы, включая стандартные средства Java и популярные сторонние библиотеки.

1. Стандартный подход: чтение CSV вручную

Для простых проектов можно обойтись без сторонних библиотек. Используем BufferedReader и String.split():

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class SimpleCSVReader {
    public static List<String[]> readCSV(String filePath) {
        List<String[]> rows = new ArrayList<>();
        String line;
        
        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
            while ((line = br.readLine()) != null) {
                String[] values = line.split(",");
                rows.add(values);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return rows;
    }
    
    public static void main(String[] args) {
        List<String[]> data = readCSV("data.csv");
        for (String[] row : data) {
            System.out.println(String.join(" | ", row));
        }
    }
}

Недостатки: не обрабатывает кавычки, экранирование запятых внутри полей, разрывы строк. Для продакшена лучше использовать библиотеки.

2. OpenCSV — мощная и простая библиотека

OpenCSV — одна из самых популярных библиотек для работы с CSV в Java. Она решает все проблемы парсинга: кавычки, экранирование, разные разделители.

Установка (Maven):

<dependency>
    <groupId>com.opencsv</groupId>
    <artifactId>opencsv</artifactId>
    <version>5.9</version>
</dependency>

Чтение CSV с OpenCSV:

import com.opencsv.CSVReader;
import com.opencsv.exceptions.CsvValidationException;
import java.io.FileReader;
import java.io.IOException;

public class OpenCSVReader {
    public static void main(String[] args) {
        try (CSVReader reader = new CSVReader(new FileReader("data.csv"))) {
            String[] nextLine;
            while ((nextLine = reader.readNext()) != null) {
                System.out.println(String.join(" | ", nextLine));
            }
        } catch (IOException | CsvValidationException e) {
            e.printStackTrace();
        }
    }
}

Запись CSV с OpenCSV:

import com.opencsv.CSVWriter;
import java.io.FileWriter;
import java.io.IOException;

public class OpenCSVWriter {
    public static void main(String[] args) {
        String[] header = {"Name", "Age", "Email"};
        String[] row1 = {"Alice", "30", "alice@example.com"};
        String[] row2 = {"Bob", "25", "bob@example.com"};
        
        try (CSVWriter writer = new CSVWriter(new FileWriter("output.csv"))) {
            writer.writeNext(header);
            writer.writeNext(row1);
            writer.writeNext(row2);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. Apache Commons CSV — гибкость и производительность

Apache Commons CSV — ещё одна мощная библиотека с поддержкой разных форматов (CSV, TSV, Excel).

Установка (Maven):

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.11.0</version>
</dependency>

Чтение CSV с Commons CSV:

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class CommonsCSVReader {
    public static void main(String[] args) {
        try (Reader reader = new FileReader("data.csv");
             CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT
                     .withHeader("Name", "Age", "Email")
                     .withIgnoreHeaderCase()
                     .withTrim())) {
            
            for (CSVRecord record : csvParser) {
                String name = record.get("Name");
                String age = record.get("Age");
                String email = record.get("Email");
                System.out.printf("%s | %s | %s%n", name, age, email);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Запись CSV с Commons CSV:

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import java.io.FileWriter;
import java.io.IOException;

public class CommonsCSVWriter {
    public static void                    

Рекомендаций