Leggere e scrivere file CSV in Kotlin
Per leggere e scrivere file CSV in Kotlin possiamo usare la libreria Apache Commons CSV, che possiamo installare come dipendenza.
Se usate Gradle:
dependencies {
implementation("org.apache.commons:commons-csv:1.10.0")
}
A questo punto create una data class che rappresenti i vosti dati; ad esempio:
data class Nota(
val id: Int,
val titolo: String,
)
Qui sotto le due funzioni per creare e leggere il file:
import org.apache.commons.csv.CSVFormat
import org.apache.commons.csv.CSVParser
import org.apache.commons.csv.CSVPrinter
import java.io.IOException
import java.nio.file.Files
import java.nio.file.Paths
fun main() {
val inputFile = "/home/fermat/TEST/test.csv"
val list = listOf<Nota>(
Nota(1, "titolo 1"),
Nota(2, "titolo 2"),
Nota(3, "titolo 3"),
)
create(inputFile, list, "ID", "TITOLO")
read(inputFile, "ID", "TITOLO")
}
@Throws(IOException::class)
fun create(inputFile: String?, list: List<Nota>, vararg header: String) {
Files.newBufferedWriter(inputFile?.let { Paths.get(it) }).use { bw ->
CSVPrinter(
bw,
CSVFormat.Builder.create().setHeader(*header).build()
).use { csvPrinter ->
for ((id, titolo) in list) {
csvPrinter.printRecord(
id, titolo
)
}
csvPrinter.flush()
csvPrinter.close()
}
}
}
@Throws(IOException::class)
fun read(inputFile: String?, vararg header: String) {
Files.newBufferedReader(inputFile?.let { Paths.get(it) }).use { reader ->
CSVParser(
reader,
CSVFormat.Builder.create().setIgnoreHeaderCase(true).setTrim(true).setHeader(*header).build()
).use { csvParser ->
for (csvRecord in csvParser) {
println(csvRecord.get("ID") + " - " + csvRecord.get("TITOLO"))
}
}
}
}
Enjoy!
kotlin gradle apache commons csv
Commentami!