Travailler avec CSV en Kotlin : aperçu des bibliothèques et exemples pratiques
CSV (Comma-Separated Values) est l'un des formats les plus courants pour l'échange de données tabulaires. En Kotlin, comme en Java, il existe plusieurs bibliothèques matures pour travailler avec CSV. Dans cet article, nous examinerons trois approches principales : la bibliothèque légère kotlin-csv, le puissant OpenCSV et le classique Apache Commons CSV. Vous apprendrez à lire, écrire et traiter des fichiers CSV avec un minimum d'effort.
1. Bibliothèque kotlin-csv (option recommandée)
kotlin-csv est une bibliothèque native Kotlin, entièrement écrite en Kotlin sans dépendances aux bibliothèques Java. Elle est idéale pour les projets Kotlin modernes.
Intégration (Gradle)
dependencies { implementation("com.github.doyaaaaaken:kotlin-csv-jvm:1.9.3")}Lecture 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]} ans, ${row[2]}") }}Écriture 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("Fichier inventory.csv créé")}2. OpenCSV — une bibliothèque Java éprouvée
OpenCSV est l'une des bibliothèques Java les plus populaires pour travailler avec CSV. Elle fonctionne parfaitement en Kotlin grâce à une compatibilité totale.
Intégration (Gradle)
dependencies { implementation("com.opencsv:opencsv:5.9")}Lecture avec mapping vers une classe
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}") }}Écriture d'objets
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("Terminé")}3. Apache Commons CSV — standard industriel
Bibliothèque de la Fondation Apache, prenant en charge divers formats CSV (Excel, MySQL, RFC 4180).
Intégration (Gradle)
dependencies { implementation("org.apache.commons:commons-csv:1.11.0")}Lecture avec en-têtes
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, âge $age") }}Écriture avec
Aussi dans la bibliothèque
Travailler avec YAML en C# (.NET) : la bibliothèque YamlDotNet
Sérialisation des objets en Java : guide complet avec exemples
Bibliothèques WebSocket pour Node.js : ws, Socket.IO, uWS — aperçu complet
Mise en cache en Rust : Redis, Memcached et solutions intégrées