Travailler avec CSV en Kotlin : bibliothèques et exemples pratiques
Le format CSV (Comma-Separated Values) reste l'un des moyens les plus populaires d'échanger des données tabulaires. En langage Kotlin, qui est activement utilisé pour le développement Android, le backend (Ktor, Spring Boot) et les scripts, il existe plusieurs bibliothèques pratiques pour travailler avec CSV. Dans cet article, nous allons examiner trois approches principales : la bibliothèque légère kotlin-csv, la puissante OpenCSV et la classique Apache Commons CSV.
1. Bibliothèque kotlin-csv (recommandée)
Il s'agit d'une solution purement Kotlin qui ne nécessite pas de dépendances Java supplémentaires. Elle est idéale pour les projets où la concision et la sécurité des types sont importantes.
Installation (Gradle)
// build.gradle.ktsimplementation("com.github.doyaaaaaken:kotlin-csv-jvm:1.9.3")Lecture CSV
La bibliothèque prend en charge la détection automatique du délimiteur, l'échappement des guillemets et les en-têtes.
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]}") }}
// Lecture avec en-têtesfun readWithHeaders() { val data = csvReader().readAllWithHeader(csvData) data.forEach { row -> println("${row["name"]} is ${row["age"]} years old") }}Écriture 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) // Sortie console : // Product,Price,Quantity // Laptop,1200,5 // Mouse,25,50}2. OpenCSV (pour les scénarios complexes)
OpenCSV est une bibliothèque Java mature qui fonctionne parfaitement en Kotlin. Elle prend en charge le mappage vers des classes de données, les délimiteurs personnalisés et le traitement en flux des fichiers volumineux.
Installation
implementation("com.opencsv:opencsv:5.9")Lecture avec mappage vers une classe de données
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)}Écriture avec en-têtes
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 (pour la compatibilité)
Cette bibliothèque est la norme de facto pour Java. Elle offre un contrôle de bas niveau sur l'analyse et prend en charge différents formats (Excel, MySQL, TSV).
Inst
Aussi dans la bibliothèque
Rate Limiting en C++ : bibliothèques et implémentation pour la protection d'API
Travailler avec YAML en TypeScript : parsing, génération et validation de données
Ramsey/UUID PHP : guide complet avec exemples pratiques
chi pour Go : guide complet avec exemples