Working with CSV in Kotlin: Libraries and Code Examples

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 Kotlin: Libraries and Code Examples



CSV (Comma-Separated Values) is one of the most popular formats for exchanging tabular data. In Kotlin, as in Java, there are several efficient libraries for working with CSV files. In this article, we will thoroughly examine three main approaches: the native kotlin-csv library, the time-tested OpenCSV, and the powerful Apache Commons CSV. You will learn how to parse, write, and process CSV data with code examples.



1. kotlin-csv Library (Kotlinx.serialization)



kotlin-csv is a modern library written in pure Kotlin. It integrates perfectly with kotlinx.serialization, allowing automatic mapping of CSV rows to data classes. This is the best choice for new Kotlin projects.



Installation

Add the dependency to build.gradle.kts:

dependencies {    implementation("com.github.doyaaaaaken:kotlin-csv-jvm:1.9.3")    implementation("org.jetbrains.kotlinx:kotlinx-serialization-csv:1.6.3")}


CSV Reading Example

import com.github.doyaaaaaken.kotlincsv.dsl.csvReaderimport kotlinx.serialization.Serializableimport kotlinx.serialization.csv.Csv

@Serializabledata class User(val name: String, val age: Int, val email: String)

fun readCsvWithKotlinCsv() { val csvData = """ name,age,email Alice,30,alice@example.com Bob,25,bob@test.org """.trimIndent()

// Option 1: manual parsing val rows: List<List<String>> = csvReader().readAll(csvData) rows.forEach { row -> println("Name: ${row[0]}, Age: ${row[1]}, Email: ${row[2]}") }

// Option 2: with serialization val csv = Csv { ignoreUnknownColumns = true } val users: List<User> = csv.decodeFromString(csvData) users.forEach { println(it) }}


CSV Writing Example

import com.github.doyaaaaaken.kotlincsv.dsl.csvWriter

fun writeCsvWithKotlinCsv() { val data = listOf( listOf("Name", "Age", "City"), listOf("John", "28", "New York"), listOf("Jane", "32", "London") ) csvWriter().open("output.csv") { writeRows(data) } println("CSV file successfully written.")}


2. OpenCSV Library



OpenCSV is a classic Java library that works great in Kotlin. It provides flexible parsing capabilities, including handling quotes, escaping, and support for different delimiters.



Installation

dependencies {    implementation("com.opencsv:opencsv:5.9")}


Reading with Mapping to Objects Example

import com.opencsv.CSVReaderBuilderimport com.opencsv.bean.CsvToBeanBuilderimport com.opencsv.bean.HeaderColumnNameMappingStrategyimport java.io.StringReader

data class Product(val id: Int, val name: String, val price: Double)

fun readCsvWithOpenCsv() { val csvContent = """ id,name,price 1,Laptop,999.99 2,Mouse,25.50 """.trimIndent()

// Manual parsing val reader = CSVReaderBuilder(StringReader(csvContent)).build() reader.forEach { line -> println("ID: ${line[0]}, Name: ${line[1]}, Price: ${line[2]}") }

// Mapping to data class val strategy = HeaderColumnNameMappingStrategy<Product>() strategy.type = Product::class.java val beans = CsvToBeanBuilder<Product>(StringReader(csvContent)) .withMappingStrategy(strategy) .build() .parse() beans.forEach { println(it) }}


CSV Writing Example

import com.opencsv.CSVWriterimport java.io.StringWriter

fun writeCsvWithOpenCsv() { val stringWriter = StringWriter() val writer = CSVWriter(stringWriter) val

Recommendations