Trabalhando com CSV em Kotlin: bibliotecas e exemplos de código

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com CSV em Kotlin: bibliotecas e exemplos práticos



O formato CSV (Comma-Separated Values) continua sendo uma das formas mais populares de trocar dados tabulares. Na linguagem Kotlin, que é ativamente usada para desenvolvimento Android, backend (Ktor, Spring Boot) e scripts, existem várias bibliotecas convenientes para trabalhar com CSV. Neste artigo, vamos analisar três abordagens principais: a biblioteca leve kotlin-csv, o poderoso OpenCSV e o clássico Apache Commons CSV.



1. Biblioteca kotlin-csv (recomendada)



Esta é uma solução puramente Kotlin que não requer dependências adicionais do Java. É ideal para projetos onde a concisão e a segurança de tipos são importantes.



Instalação (Gradle)

// build.gradle.ktsimplementation("com.github.doyaaaaaken:kotlin-csv-jvm:1.9.3")


Leitura de CSV

A biblioteca suporta detecção automática de delimitador, escape de aspas e cabeçalhos.

import com.github.doyaaaaaken.kotlincsv.dsl.csvReader

fun readCsvExample() { val csvData = """ name,age,city Alice,30,New York Bob,25,London """.trimIndent()

val rows: List<List<String>> = csvReader().readAll(csvData)

rows.forEach { row -> println("Name: ${row[0]}, Age: ${row[1]}, City: ${row[2]}") }}

// Leitura com cabeçalhosfun readWithHeaders() { val data = csvReader().readAllWithHeader(csvData) data.forEach { row -> println("${row["name"]} is ${row["age"]} years old") }}


Escrita de CSV

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

fun writeCsvExample() { val rows = listOf( listOf("Product", "Price", "Quantity"), listOf("Laptop", "1200", "5"), listOf("Mouse", "25", "50") )

csvWriter().writeAll(rows) // Saída no console: // Product,Price,Quantity // Laptop,1200,5 // Mouse,25,50}


2. OpenCSV (para cenários complexos)



OpenCSV é uma biblioteca Java madura que funciona muito bem em Kotlin. Ela suporta mapeamento para data-classes, delimitadores personalizados e processamento em fluxo de arquivos grandes.



Instalação

implementation("com.opencsv:opencsv:5.9")


Leitura com mapeamento para data-class

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

data class Person( @CsvBindByName(column = "name") val name: String, @CsvBindByName(column = "age") val age: Int, @CsvBindByName(column = "city") val city: String)

fun readWithOpenCsv() { val csv = """ name,age,city Alice,30,New York Bob,25,London """.trimIndent()

val beans: List<Person> = CsvToBeanBuilder<Person>(StringReader(csv)) .withType(Person::class.java) .build() .parse()

beans.forEach { println(it) } // Person(name=Alice, age=30, city=New York) // Person(name=Bob, age=25, city=London)}


Escrita com cabeçalhos

import com.opencsv.bean.StatefulBeanToCsvimport com.opencsv.bean.StatefulBeanToCsvBuilderimport java.io.StringWriter

fun writeWithOpenCsv() { val people = listOf( Person("Charlie", 35, "Paris"), Person("Diana", 28, "Tokyo") )

val writer = StringWriter() val beanToCsv: StatefulBeanToCsv<Person> = StatefulBeanToCsvBuilder<Person>(writer) .build() beanToCsv.write(people)

println(writer.toString()) // name,age,city // Charlie,35,Paris // Diana,28,Tokyo}


3. Apache Commons CSV (para compatibilidade)



Esta biblioteca é o padrão de facto para Java. Ela fornece controle de baixo nível sobre o parsing e suporta vários formatos (Excel, MySQL, TSV).



Inst

Recommendations