在 Kotlin 中处理 CSV:库、解析与数据写入

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

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

开始课程

在 Kotlin 中处理 CSV:库概览与实践示例



CSV(逗号分隔值)是交换表格数据最常用的格式之一。在 Kotlin(与 Java 类似)中,有多个成熟的库可用于处理 CSV。本文将介绍三种主要方法:轻量级库 kotlin-csv、功能强大的 OpenCSV 以及经典的 Apache Commons CSV。您将学习如何以最少的精力读取、写入和处理 CSV 文件。



1. kotlin-csv 库(推荐方案)



kotlin-csv 是一个原生的 Kotlin 库,完全用 Kotlin 编写,不依赖任何 Java 库。它非常适合现代 Kotlin 项目。



添加依赖(Gradle)

dependencies {    implementation("com.github.doyaaaaaken:kotlin-csv-jvm:1.9.3")}


读取 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]} 岁, ${row[2]}") }}


写入 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("文件 inventory.csv 已创建")}


2. OpenCSV — 久经考验的 Java 库



OpenCSV 是最流行的 Java CSV 处理库之一。由于完全兼容,它在 Kotlin 中也能很好地工作。



添加依赖(Gradle)

dependencies {    implementation("com.opencsv:opencsv:5.9")}


读取并映射到类

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


写入对象

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("完成")}


3. Apache Commons CSV — 工业标准



来自 Apache Foundation 的库,支持多种 CSV 格式(Excel、MySQL、RFC 4180)。



添加依赖(Gradle)

dependencies {    implementation("org.apache.commons:commons-csv:1.11.0")}


带标题读取

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, 年龄 $age") }}


写入带

推荐