Kotlin CSV文件处理
Kotlin CSV文件处理[编辑 | 编辑源代码]
CSV(Comma-Separated Values)是一种简单的文件格式,用于存储表格数据(如电子表格或数据库)。Kotlin提供了多种方式来处理CSV文件,包括使用标准库函数或第三方库(如Apache Commons CSV或OpenCSV)。本文将介绍如何使用Kotlin读取、写入和操作CSV文件。
介绍[编辑 | 编辑源代码]
CSV文件由纯文本组成,其中数据以逗号分隔(或其他分隔符,如分号或制表符)。每行代表一条记录,每个字段用分隔符隔开。例如: ```csv Name,Age,City Alice,30,New York Bob,25,London ```
Kotlin处理CSV文件的方式包括: 1. 使用标准库(`java.io`和`kotlin.io`)手动解析。 2. 使用第三方库(如Apache Commons CSV或OpenCSV)简化操作。
使用Kotlin标准库处理CSV[编辑 | 编辑源代码]
Kotlin的标准库提供了基本的文件读写功能,可以用于解析CSV文件。
读取CSV文件[编辑 | 编辑源代码]
以下示例展示如何手动读取CSV文件:
import java.io.File
fun readCSV(filePath: String) {
File(filePath).forEachLine { line ->
val fields = line.split(",")
println("Record: $fields")
}
}
fun main() {
readCSV("data.csv")
}
假设`data.csv`内容如下: ```csv Name,Age,City Alice,30,New York Bob,25,London ```
输出: ``` Record: [Name, Age, City] Record: [Alice, 30, New York] Record: [Bob, 25, London] ```
写入CSV文件[编辑 | 编辑源代码]
以下示例展示如何手动写入CSV文件:
import java.io.File
fun writeCSV(filePath: String, data: List<List<String>>) {
File(filePath).printWriter().use { writer ->
data.forEach { record ->
writer.println(record.joinToString(","))
}
}
}
fun main() {
val data = listOf(
listOf("Name", "Age", "City"),
listOf("Alice", "30", "New York"),
listOf("Bob", "25", "London")
)
writeCSV("output.csv", data)
}
生成的`output.csv`文件内容与输入相同。
使用第三方库处理CSV[编辑 | 编辑源代码]
对于更复杂的CSV操作(如处理引号、转义字符或大型文件),可以使用第三方库。
Apache Commons CSV[编辑 | 编辑源代码]
Apache Commons CSV是一个流行的库,支持多种CSV格式。
读取CSV[编辑 | 编辑源代码]
import org.apache.commons.csv.CSVFormat
import org.apache.commons.csv.CSVParser
import java.io.FileReader
fun readCSVWithApacheCommons(filePath: String) {
FileReader(filePath).use { reader ->
val csvParser = CSVParser(reader, CSVFormat.DEFAULT.withHeader())
csvParser.forEach { record ->
println("Name: ${record["Name"]}, Age: ${record["Age"]}, City: ${record["City"]}")
}
}
}
fun main() {
readCSVWithApacheCommons("data.csv")
}
输出: ``` Name: Alice, Age: 30, City: New York Name: Bob, Age: 25, City: London ```
写入CSV[编辑 | 编辑源代码]
import org.apache.commons.csv.CSVFormat
import org.apache.commons.csv.CSVPrinter
import java.io.FileWriter
fun writeCSVWithApacheCommons(filePath: String) {
FileWriter(filePath).use { writer ->
CSVPrinter(writer, CSVFormat.DEFAULT.withHeader("Name", "Age", "City")).use { printer ->
printer.printRecord("Alice", 30, "New York")
printer.printRecord("Bob", 25, "London")
}
}
}
fun main() {
writeCSVWithApacheCommons("output_apache.csv")
}
OpenCSV[编辑 | 编辑源代码]
OpenCSV是另一个流行的库,适用于Kotlin/Java项目。
读取CSV[编辑 | 编辑源代码]
import com.opencsv.CSVReader
import java.io.FileReader
fun readCSVWithOpenCSV(filePath: String) {
CSVReader(FileReader(filePath)).use { reader ->
reader.forEach { fields ->
println("Record: ${fields.toList()}")
}
}
}
fun main() {
readCSVWithOpenCSV("data.csv")
}
写入CSV[编辑 | 编辑源代码]
import com.opencsv.CSVWriter
import java.io.FileWriter
fun writeCSVWithOpenCSV(filePath: String) {
CSVWriter(FileWriter(filePath)).use { writer ->
writer.writeNext(arrayOf("Name", "Age", "City"))
writer.writeNext(arrayOf("Alice", "30", "New York"))
writer.writeNext(arrayOf("Bob", "25", "London"))
}
}
fun main() {
writeCSVWithOpenCSV("output_opencsv.csv")
}
实际应用案例[编辑 | 编辑源代码]
以下是一个真实场景:从CSV文件加载用户数据并计算平均年龄。
import org.apache.commons.csv.CSVFormat
import org.apache.commons.csv.CSVParser
import java.io.FileReader
fun calculateAverageAge(filePath: String): Double {
var totalAge = 0.0
var count = 0
FileReader(filePath).use { reader ->
val csvParser = CSVParser(reader, CSVFormat.DEFAULT.withHeader())
csvParser.forEach { record ->
val age = record["Age"].toInt()
totalAge += age
count++
}
}
return if (count > 0) totalAge / count else 0.0
}
fun main() {
val averageAge = calculateAverageAge("data.csv")
println("Average Age: $averageAge")
}
输出: ``` Average Age: 27.5 ```
总结[编辑 | 编辑源代码]
Kotlin提供了多种方式处理CSV文件: 1. **标准库**:适合简单的CSV操作。 2. **第三方库(Apache Commons CSV/OpenCSV)**:适合复杂场景(如带引号的字段或大型文件)。
根据需求选择合适的工具,并确保处理异常(如文件不存在或格式错误)。