Working with CSV in Java: OpenCSV and Apache Commons CSV Libraries

Online Python Trainer for Beginners

Learn Python easily without overwhelming theory. Solve practical tasks with automatic checking, get hints in Russian, and write code directly in your browser — no installation required.

Start Course

Working with CSV in Java: OpenCSV and Apache Commons CSV



CSV (Comma-Separated Values) is one of the most common formats for storing and exchanging tabular data. Java does not have a built-in library for convenient CSV handling (only manual parsing via BufferedReader), so developers use third-party tools. In this article, we will look at two popular libraries: OpenCSV and Apache Commons CSV. You will learn how to read, write, and process CSV files with code examples.



1. OpenCSV: Lightweight Parsing and Annotations



OpenCSV is a simple and efficient library for working with CSV. It supports line-by-line reading, mapping to Java objects (via @CsvBindByName annotations), as well as data writing.



Adding Dependency (Maven)

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


Reading CSV into a List of Strings

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)); } } }}


Mapping to a Java Object

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;

// getters and setters}

// Readingtry (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()));}


Writing 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: Flexibility and Performance



Apache Commons CSV is part of the Apache Commons ecosystem. It features high performance, support for different formats (CSV, TSV, Excel), and customizable delimiters.



Adding Dependency (Maven)

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


Reading CSV with Headers

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); }}


Writing CSV with Custom Delimiter

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

Recommendations