All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.crabshue.commons.csv.CsvFileReader.kt Maven / Gradle / Ivy

package com.crabshue.commons.csv

import com.crabshue.commons.csv.exceptions.CsvErrorContext
import com.crabshue.commons.csv.exceptions.CsvErrorType
import com.crabshue.commons.exceptions.ApplicationException
import com.opencsv.bean.CsvToBeanBuilder
import com.opencsv.bean.HeaderColumnNameMappingStrategy
import java.io.InputStream
import java.io.InputStreamReader
import java.nio.charset.StandardCharsets
import java.nio.file.Files
import java.nio.file.Path

class CsvFileReader private constructor(
    private val csvInputStream: InputStream
) {

    private var delimiter: Char = ','

    fun withDelimiter(delimiter: Char): CsvFileReader {
        this.delimiter = delimiter
        return this
    }


    fun  readCsvFile(clazz: Class): List {

        val ret: List

        val reader = InputStreamReader(csvInputStream, StandardCharsets.UTF_8)

        reader.use {

            val headerColumnNameMappingStrategy = HeaderColumnNameMappingStrategy()

            headerColumnNameMappingStrategy.type = clazz

            val csvToBean = CsvToBeanBuilder(reader)
                .withType(clazz)
                .withSeparator(delimiter)
                .withMappingStrategy(headerColumnNameMappingStrategy)
                .build()

            ret = csvToBean.parse()
        }

        return ret
    }

    companion object {

        @JvmStatic
        fun of(csvFile: Path): CsvFileReader {

            if (Files.notExists(csvFile)) {
                throw ApplicationException(CsvErrorType.CSV_FILE_NOT_EXISTS)
                    .addContextValue(CsvErrorContext.CSV_FILE, csvFile)
            }

            val csvInputStream = Files.newInputStream(csvFile)
            return CsvFileReader(csvInputStream)

        }

        @JvmStatic
        fun of(csvFile: ByteArray): CsvFileReader {

            val csvInputStream = csvFile.inputStream()
            return CsvFileReader(csvInputStream)
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy