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