Работа с CSV в Java: библиотеки OpenCSV и Apache Commons CSV

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

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

Начать курс

Работа с CSV в Java: OpenCSV и Apache Commons CSV

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

1. OpenCSV: лёгкий парсинг и аннотации

OpenCSV — простая и эффективная библиотека для работы с CSV. Она поддерживает чтение построчно, маппинг на Java-объекты (через аннотации @CsvBindByName), а также запись данных.

Подключение (Maven)

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

Чтение CSV в список строк

import com.opencsv.CSVReader;
import java.io.FileReader;
import java.util.List;

public class OpenCsvExample {
    public static void main(String[] args) throws Exception {
        try (CSVReader reader = new CSVReader(new FileReader("data.csv"))) {
            List<String[]> rows = reader.readAll();
            for (String[] row : rows) {
                System.out.println(String.join(" | ", row));
            }
        }
    }
}

Маппинг на Java-объект

import com.opencsv.bean.CsvBindByName;
import com.opencsv.bean.CsvToBean;
import com.opencsv.bean.CsvToBeanBuilder;
import java.io.FileReader;
import java.util.List;

public class User {
    @CsvBindByName(column = "name")
    private String name;

    @CsvBindByName(column = "email")
    private String email;

    // геттеры и сеттеры
}

// Чтение
try (FileReader reader = new FileReader("users.csv")) {
    CsvToBean<User> csvToBean = new CsvToBeanBuilder<User>(reader)
            .withType(User.class)
            .withIgnoreLeadingWhiteSpace(true)
            .build();
    List<User> users = csvToBean.parse();
    users.forEach(u -> System.out.println(u.getName() + " - " + u.getEmail()));
}

Запись CSV

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

try (CSVWriter writer = new CSVWriter(new FileWriter("output.csv"))) {
    String[] header = {"Name", "Age", "City"};
    writer.writeNext(header);
    writer.writeNext(new String[]{"Alice", "30", "Moscow"});
    writer.writeNext(new String[]{"Bob", "25", "SPb"});
}

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

Apache Commons CSV — часть экосистемы Apache Commons. Отличается высокой производительностью, поддержкой разных форматов (CSV, TSV, Excel) и настраиваемыми разделителями.

Подключение (Maven)

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

Чтение 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.Reader;

try (Reader in = new FileReader("data.csv");
     CSVParser parser = CSVFormat.DEFAULT
             .withFirstRecordAsHeader()
             .parse(in)) {
    for (CSVRecord record : parser) {
        String name = record.get("name");
        String email = record.get("email");
        System.out.println(name + " : " + email);
    }
}

Запись CSV с кастомным разделителем

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

try (Writer out = new FileWriter("output.tsv");
     CSVPrinter printer = CSVFormat.TDF.print(out)) { // TDF — табуляция
    printer.printRecord("ID", "Product", "Price");
    printer.printRecord(1, "Laptop", 1200);
    printer.printRecord(2, "Mouse", 25);
}

Работа с разными форматами

Commons CSV поддерживает предопределённые форматы:

  • CSVFormat.DEFAULT — стандартный CSV (запятая)
  • CSVFormat.EXCEL — формат Excel
  • CSVFormat.TDF — табуляция (TSV)
  • CSVFormat.RFC4180 — строгий RFC-формат

3. Сравнение OpenCSV и

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