Trabajo con CSV en Kotlin: descripción general de bibliotecas y ejemplos prácticos
CSV (Valores Separados por Comas) es uno de los formatos más comunes para el intercambio de datos tabulares. En Kotlin, al igual que en Java, existen varias bibliotecas maduras para trabajar con CSV. En este artículo, veremos tres enfoques principales: la biblioteca ligera kotlin-csv, el potente OpenCSV y el clásico Apache Commons CSV. Aprenderá a leer, escribir y procesar archivos CSV con el mínimo esfuerzo.
1. Biblioteca kotlin-csv (opción recomendada)
kotlin-csv es una biblioteca nativa de Kotlin, escrita completamente en Kotlin sin dependencias de bibliotecas Java. Es ideal para proyectos modernos en Kotlin.
Configuración (Gradle)
dependencies { implementation("com.github.doyaaaaaken:kotlin-csv-jvm:1.9.3")}Lectura de CSV
import com.github.doyaaaaaken.kotlincsv.dsl.csvReader
fun main() { val csvData = """ name,age,city Alice,30,New York Bob,25,London Charlie,35,Tokyo """.trimIndent()
val rows: List<List<String>> = csvReader().readAll(csvData) rows.forEach { row -> println("${row[0]} — ${row[1]} años, ${row[2]}") }}Escritura de CSV
import com.github.doyaaaaaken.kotlincsv.dsl.csvWriter
fun main() { val data = listOf( listOf("product", "price", "quantity"), listOf("Laptop", "1200", "5"), listOf("Mouse", "25", "50") ) csvWriter().open("inventory.csv") { writeRows(data) } println("Archivo inventory.csv creado")}2. OpenCSV — biblioteca Java probada
OpenCSV es una de las bibliotecas Java más populares para trabajar con CSV. Funciona perfectamente en Kotlin gracias a su total compatibilidad.
Configuración (Gradle)
dependencies { implementation("com.opencsv:opencsv:5.9")}Lectura con mapeo a clase
import com.opencsv.bean.CsvToBeanBuilderimport java.io.FileReader
data class Person( @field:com.opencsv.bean.CsvBindByName(column = "name") val name: String, @field:com.opencsv.bean.CsvBindByName(column = "age") val age: Int, @field:com.opencsv.bean.CsvBindByName(column = "city") val city: String)
fun main() { val beans = CsvToBeanBuilder<Person>(FileReader("people.csv")) .withType(Person::class.java) .build() .parse()
beans.forEach { println("${it.name} (${it.age}) — ${it.city}") }}Escritura de objetos
import com.opencsv.bean.StatefulBeanToCsvimport com.opencsv.bean.StatefulBeanToCsvBuilderimport java.io.FileWriter
fun main() { val people = listOf( Person("Alice", 30, "New York"), Person("Bob", 25, "London") ) val writer = FileWriter("output.csv") val beanToCsv: StatefulBeanToCsv<Person> = StatefulBeanToCsvBuilder(writer).build() beanToCsv.write(people) writer.close() println("Listo")}3. Apache Commons CSV — estándar industrial
Biblioteca de Apache Foundation que admite varios formatos CSV (Excel, MySQL, RFC 4180).
Configuración (Gradle)
dependencies { implementation("org.apache.commons:commons-csv:1.11.0")}Lectura con encabezados
import org.apache.commons.csv.CSVFormatimport org.apache.commons.csv.CSVParserimport java.io.FileReader
fun main() { val parser = CSVParser.parse( FileReader("data.csv"), CSVFormat.DEFAULT.withFirstRecordAsHeader() ) parser.forEach { record -> val name = record["name"] val age = record["age"] println("$name, edad $age") }}