Trabajo con CSV en Kotlin: bibliotecas y ejemplos de código
CSV (Comma-Separated Values) es uno de los formatos más populares para el intercambio de datos tabulares. En Kotlin, al igual que en Java, existen varias bibliotecas eficientes para trabajar con archivos CSV. En este artículo, analizaremos en detalle tres enfoques principales: la biblioteca nativa kotlin-csv, la probada OpenCSV y la potente Apache Commons CSV. Aprenderá a analizar sintácticamente, escribir y procesar datos CSV con ejemplos de código.
1. Biblioteca kotlin-csv (Kotlinx.serialization)
kotlin-csv es una biblioteca moderna escrita en Kotlin puro. Se integra perfectamente con kotlinx.serialization, lo que permite mapear automáticamente las filas CSV en clases de datos. Es la mejor opción para proyectos nuevos en Kotlin.
Instalación
Agregue la dependencia en build.gradle.kts:
dependencies { implementation("com.github.doyaaaaaken:kotlin-csv-jvm:1.9.3") implementation("org.jetbrains.kotlinx:kotlinx-serialization-csv:1.6.3")}Ejemplo de lectura de 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()
// Opción 1: análisis sintáctico manual val rows: List<List<String>> = csvReader().readAll(csvData) rows.forEach { row -> println("Name: ${row[0]}, Age: ${row[1]}, Email: ${row[2]}") }
// Opción 2: con serialización val csv = Csv { ignoreUnknownColumns = true } val users: List<User> = csv.decodeFromString(csvData) users.forEach { println(it) }}Ejemplo de escritura de 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("Archivo CSV escrito exitosamente.")}2. Biblioteca OpenCSV
OpenCSV es una biblioteca clásica de Java que funciona muy bien en Kotlin. Proporciona capacidades flexibles de análisis sintáctico, incluyendo manejo de comillas, escape y soporte para diferentes delimitadores.
Instalación
dependencies { implementation("com.opencsv:opencsv:5.9")}Ejemplo de lectura con mapeo a 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()
// Análisis sintáctico manual val reader = CSVReaderBuilder(StringReader(csvContent)).build() reader.forEach { line -> println("ID: ${line[0]}, Name: ${line[1]}, Price: ${line[2]}") }
// Mapeo a clase de datos val strategy = HeaderColumnNameMappingStrategy<Product>() strategy.type = Product::class.java val beans = CsvToBeanBuilder<Product>(StringReader(csvContent)) .withMappingStrategy(strategy) .build() .parse() beans.forEach { println(it) }}Ejemplo de escritura de CSV
import com.opencsv.CSVWriterimport java.io.StringWriter
fun writeCsvWithOpenCsv() { val stringWriter = StringWriter() val writer = CSVWriter(stringWriter) val