Trabalho com CSV em Kotlin: bibliotecas e exemplos de código
CSV (Comma-Separated Values) — um dos formatos mais populares para troca de dados tabulares. Em Kotlin, assim como em Java, existem várias bibliotecas eficientes para trabalhar com arquivos CSV. Neste artigo, vamos analisar detalhadamente três abordagens principais: a biblioteca nativa kotlin-csv, a consagrada OpenCSV e a poderosa Apache Commons CSV. Você aprenderá como fazer parsing, escrever e processar dados CSV com exemplos de código.
1. Biblioteca kotlin-csv (Kotlinx.serialization)
kotlin-csv — é uma biblioteca moderna escrita em Kotlin puro. Ela se integra perfeitamente com kotlinx.serialization, permitindo mapear automaticamente linhas CSV para data-classes. É a melhor escolha para novos projetos em Kotlin.
Instalação
Adicione a dependência no build.gradle.kts:
dependencies { implementation("com.github.doyaaaaaken:kotlin-csv-jvm:1.9.3") implementation("org.jetbrains.kotlinx:kotlinx-serialization-csv:1.6.3")}Exemplo de leitura CSV
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()
// Opção 1: parsing manual val rows: List<List<String>> = csvReader().readAll(csvData) rows.forEach { row -> println("Name: ${row[0]}, Age: ${row[1]}, Email: ${row[2]}") }
// Opção 2: com serialização val csv = Csv { ignoreUnknownColumns = true } val users: List<User> = csv.decodeFromString(csvData) users.forEach { println(it) }}Exemplo de escrita 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("Arquivo CSV escrito com sucesso.")}2. Biblioteca OpenCSV
OpenCSV — é uma biblioteca Java clássica que funciona muito bem em Kotlin. Ela oferece recursos flexíveis de parsing, incluindo tratamento de aspas, escape e suporte a diferentes delimitadores.
Instalação
dependencies { implementation("com.opencsv:opencsv:5.9")}Exemplo de leitura com mapeamento para objetos
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()
// Parsing manual val reader = CSVReaderBuilder(StringReader(csvContent)).build() reader.forEach { line -> println("ID: ${line[0]}, Name: ${line[1]}, Price: ${line[2]}") }
// Mapeamento para 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) }}Exemplo de escrita CSV
import com.opencsv.CSVWriterimport java.io.StringWriter
fun writeCsvWithOpenCsv() { val stringWriter = StringWriter() val writer = CSVWriter(stringWriter) val Também na biblioteca
WebSocket em Node.js: biblioteca ws para tempo real
Autorização e Autenticação em Kotlin: JWT, Spring Security e Ktor
Envio de SMS via API no Node.js: biblioteca twilio