Kotlin CSV
最后修改于 2024 年 1 月 29 日
本文介绍了如何在 Kotlin 中读写 CSV 文件。 我们使用 Opencsv 和 kotlin-csv 库。
CSV(逗号分隔值)格式是电子表格和数据库中使用的非常流行的数据导入和导出格式。
CSV 文件中的每一行都是一条数据记录。 每条记录由一个或多个字段组成,这些字段由逗号分隔。 尽管 CSV 格式是一种非常简单的格式,但可能存在许多差异,例如不同的分隔符、换行符或引用字符。
CSVReader
以下示例从 CSV 文件中读取数字。
3,5,6,2,1,7,8 4,5,7,3,2,8,9
我们在 numbers.csv
文件中有两条数据记录。
package com.zetcode import com.opencsv.CSVReader import java.io.FileReader import java.nio.charset.StandardCharsets fun main() { val fileName = "src/main/resources/numbers.csv" val fr = FileReader(fileName, StandardCharsets.UTF_8) fr.use { val reader = CSVReader(fr) reader.use { r -> var line = r.readNext() while (line != null) { line.forEach { print(" $it") } println() line = r.readNext() } } } }
该示例从 numbers.csv
文件中读取数字,并将它们打印到控制台。
val fileName = "src/main/resources/numbers.csv"
该文件位于 src/main/resources
目录中。
val reader = CSVReader(fr)
CSVReader
是一个用于读取 CSV 文件的类。
var line = r.readNext() while (line != null) { line.forEach { print(" $it") } println() line = r.readNext() }
我们遍历阅读器并将值打印到终端。 readNext
方法从缓冲区读取下一行并将其转换为字符串数组。
使用不同的分隔符读取 CSV
尽管它的名称是 CSV 文件,但可以使用逗号以外的分隔符来分隔文件。 以下示例演示了如何读取由管道 | 字符分隔的数字。
1|2|3|4|5 6|7|3|9|8 9|1|1|0|2
我们有三行数字,用 | 字符分隔。
package com.zetcode import com.opencsv.CSVParserBuilder import com.opencsv.CSVReaderBuilder import java.nio.charset.StandardCharsets import java.nio.file.Files import java.nio.file.Path import java.nio.file.Paths fun main() { val fileName = "src/main/resources/numbers.csv" val myPath: Path = Paths.get(fileName) val parser = CSVParserBuilder().withSeparator('|').build() Files.newBufferedReader(myPath, StandardCharsets.UTF_8).use { br -> CSVReaderBuilder(br).withCSVParser(parser) .build().use { reader -> val rows = reader.readAll() for (row in rows) { for (e in row) { print("$e ") } println() } } } }
该示例从 numbers.csv
文件中读取值,并将它们打印到控制台。
val parser = CSVParserBuilder().withSeparator('|').build()
创建了一个带有特定解析器字符的 CSVParser
。
Files.newBufferedReader(myPath, StandardCharsets.UTF_8).use { br -> CSVReaderBuilder(br).withCSVParser(parser) .build().use { reader ->
使用 CSVReaderBuilder
创建了 CSVReader
。
val rows = reader.readAll()
我们使用 readAll
方法一次将所有元素读入一个列表。 这种方法不应用于大型文件。
for (row in rows) { for (e in row) { print("$e ") } println() }
我们遍历数据。
CSVWriter
CSVWriter
类用于将数据写入 CSV 文件。
package com.zetcode import com.opencsv.CSVWriter import java.io.FileOutputStream import java.io.OutputStreamWriter import java.nio.charset.StandardCharsets fun main() { val entries = arrayOf("book", "coin", "pencil", "cup") val fileName = "src/main/resources/items.csv" FileOutputStream(fileName).use { fos -> OutputStreamWriter(fos, StandardCharsets.UTF_8).use { osw -> CSVWriter(osw).use { writer -> writer.writeNext( entries ) } } } }
该示例将数据从数组写入 items.csv
文件。 该文件被写入项目根目录。 writeNext
方法将一个元素数组写入文件。
使用 kotlin-csv 读/写 CSV
在下一个示例中,我们使用 kotlin-csv
库读取 CSV 数据。
package com.zetcode import com.github.doyaaaaaken.kotlincsv.dsl.csvReader fun main() { csvReader().open("src/main/resources/numbers.csv") { readAllAsSequence().forEach { row -> for (e in row) { print("$e ") } println() } } }
我们从 numbers.csv
文件中读取数据。
在下一个示例中,我们写入 CSV 数据。
package com.zetcode import com.github.doyaaaaaken.kotlincsv.dsl.csvWriter fun main() { val rows = listOf(listOf(1, 2, 3), listOf(4, 5, 6)) val fileName = "src/main/resources/data.csv" csvWriter().open(fileName) { rows.forEach { row -> writeRow(row) } } }
将一个列表列表写入 data.csv
文件。
来源
在本文中,我们展示了如何在 Kotlin 中使用 CSV。
作者
列出 所有 Kotlin 教程。