Working with CSV in Java: OpenCSV, Apache Commons CSV, and Java Scanner 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: Library Overview and Examples



CSV (Comma-Separated Values) is one of the most common formats for exchanging tabular data. Despite its apparent simplicity, manual CSV parsing in Java can lead to errors due to quote escaping, nested commas, and different encodings. In this article, we will look at three main approaches: using OpenCSV, Apache Commons CSV, and the standard java.util.Scanner.



1. OpenCSV — A Flexible and Popular Library



OpenCSV is a lightweight open-source library that supports reading and writing CSV, TSV, and other delimiters. It automatically handles escaping, quotes, and multi-line fields.



Adding Dependency (Maven)

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


Example: Reading CSV into a List of Objects

import com.opencsv.CSVReader;import com.opencsv.bean.CsvToBean;import com.opencsv.bean.HeaderColumnNameMappingStrategy;import java.io.FileReader;import java.util.List;

public class OpenCSVExample { public static void main(String[] args) throws Exception { try (FileReader reader = new FileReader("users.csv")) { // Manual parsing CSVReader csvReader = new CSVReader(reader); String[] line; while ((line = csvReader.readNext()) != null) { System.out.println("Name: " + line[0] + ", Email: " + line[1]); } } }}


Example: Mapping to a Java Bean

public class User {    private String name;    private String email;    // getters and setters}

// Reading with mappingtry (FileReader reader = new FileReader("users.csv")) { HeaderColumnNameMappingStrategy<User> strategy = new HeaderColumnNameMappingStrategy<>(); strategy.setType(User.class);

CsvToBean<User> csvToBean = new CsvToBeanBuilder<User>(reader) .withMappingStrategy(strategy) .build();

List<User> users = csvToBean.parse();}


2. Apache Commons CSV — The Apache Standard



Apache Commons CSV is part of the Apache Commons ecosystem. It provides ready-made formats (RFC 4180, Excel, MySQL) and streaming processing.



Adding Dependency (Maven)

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


Example: Reading 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;

public class CommonsCSVExample { public static void main(String[] args) throws Exception { try (Reader reader = new FileReader("data.csv"); CSVParser parser = CSVFormat.DEFAULT .withFirstRecordAsHeader() .parse(reader)) {

for (CSVRecord record : parser) { String id = record.get("ID"); String value = record.get("Value"); System.out.println(id + " -> " + value); } } }}


Writing CSV

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

try (Writer writer = new FileWriter("output.csv"); CSVPrinter printer = CSVFormat.DEFAULT .withHeader("Name", "Age") .print(writer)) {

printer.printRecord("Alice", 30); printer.printRecord("Bob", 25);}

Recommendations