Leggere e scrivere file CSV in Kotlin

Mattepuffo's logo
Leggere e scrivere file CSV in Kotlin

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!


Condividi

Commentami!