Работа с CSV в Kotlin: библиотеки и примеры кода

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

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

Начать курс

Работа с CSV в Kotlin: библиотеки и примеры кода

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

1. Библиотека kotlin-csv (Kotlinx.serialization)

kotlin-csv — это современная библиотека, написанная на чистом Kotlin. Она идеально интегрируется с kotlinx.serialization, что позволяет автоматически маппить CSV-строки в data-классы. Это лучший выбор для новых проектов на Kotlin.

Установка

Добавьте зависимость в 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

import com.github.doyaaaaaken.kotlincsv.dsl.csvReader
import kotlinx.serialization.Serializable
import kotlinx.serialization.csv.Csv

@Serializable
data 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()

    // Вариант 1: ручной парсинг
    val rows: List<List<String>> = csvReader().readAll(csvData)
    rows.forEach { row ->
        println("Name: ${row[0]}, Age: ${row[1]}, Email: ${row[2]}")
    }

    // Вариант 2: с сериализацией
    val csv = Csv { ignoreUnknownColumns = true }
    val users: List<User> = csv.decodeFromString(csvData)
    users.forEach { println(it) }
}

Пример записи CSV

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 файл успешно записан.")
}

2. Библиотека OpenCSV

OpenCSV — классическая Java-библиотека, которая отлично работает в Kotlin. Она предоставляет гибкие возможности для парсинга, включая обработку кавычек, экранирование и поддержку разных разделителей.

Установка

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

Пример чтения с маппингом в объекты

import com.opencsv.CSVReaderBuilder
import com.opencsv.bean.CsvToBeanBuilder
import com.opencsv.bean.HeaderColumnNameMappingStrategy
import 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()

    // Ручной парсинг
    val reader = CSVReaderBuilder(StringReader(csvContent)).build()
    reader.forEach { line ->
        println("ID: ${line[0]}, Name: ${line[1]}, Price: ${line[2]}")
    }

    // Маппинг в data-класс
    val strategy = HeaderColumnNameMappingStrategy<Product>()
    strategy.type = Product::class.java
    
    val beans = CsvToBeanBuilder<Product>(StringReader(csvContent))
        .withMappingStrategy(strategy)
        .build()
        .parse()
    
    beans.forEach { println(it) }
}

Пример записи CSV

import com.opencsv.CSVWriter
import java.io.StringWriter

fun writeCsvWithOpenCsv() {
    val stringWriter = StringWriter()
    val writer = CSVWriter(stringWriter)
    
    val entries = arrayOf(
        arrayOf("Country", "Capital", "Population"),
        arrayOf("Russia", "Moscow", "144.5M"),
        arrayOf("Japan", "Tokyo", "125.7M")
    )
    
    writer.writeAll(entries.toList())
    writer.close()
    
    println(stringWriter.toString())
}

3. Apache Commons CSV

Apache Commons CSV — ещё одна мощная библиотека от Apache. Она предоставляет богатый API для работы с CSV, TSV и другими форматами, поддерживает пользовательские разделители и эк

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