在 Kotlin 中处理 CSV:库与代码示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 Kotlin 中处理 CSV:库与实用示例



CSV(逗号分隔值)格式仍然是交换表格数据最流行的方法之一。在 Kotlin 语言中,该语言被积极用于 Android 开发、后端(Ktor、Spring Boot)和脚本编写,有多个方便的库可用于处理 CSV。在本文中,我们将介绍三种主要方法:轻量级库 kotlin-csv、功能强大的 OpenCSV 和经典的 Apache Commons CSV。



1. kotlin-csv 库(推荐)



这是一个纯 Kotlin 解决方案,不需要额外的 Java 依赖。它非常适合注重简洁性和类型安全性的项目。



安装(Gradle)

// build.gradle.ktsimplementation("com.github.doyaaaaaken:kotlin-csv-jvm:1.9.3")


读取 CSV

该库支持自动检测分隔符、引号转义和表头。

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]}") }}

// 带表头读取fun readWithHeaders() { val data = csvReader().readAllWithHeader(csvData) data.forEach { row -> println("${row["name"]} is ${row["age"]} years old") }}


写入 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) // 输出到控制台: // Product,Price,Quantity // Laptop,1200,5 // Mouse,25,50}


2. OpenCSV(用于复杂场景)



OpenCSV 是一个成熟的 Java 库,在 Kotlin 中也能很好地工作。它支持映射到 data 类、自定义分隔符以及大文件的流式处理。



安装

implementation("com.opencsv:opencsv:5.9")


读取并映射到 data 类

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)}


带表头写入

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(用于兼容性)



这个库是 Java 的事实标准。它提供对解析的低级控制,并支持多种格式(Excel、MySQL、TSV)。



安

推荐