안드로이드

[Kotlin] CSV 파일 읽고 쓰기

디벨로펄 2023. 1. 15.
반응형

참고 : https://www.baeldung.com/kotlin/csv-files

 

1. 개요

CSV 파일은 다목적으로 사용되는 data 형식이다. MS Excel, Google Sheet 등에서 활용된다. CSV파일은 쉽게 여러 작은 파일로 쪼개질 수 있고, 여러 파일을 하나의 파일로 합칠 수 있다. 이러한 특징은 병렬 처리를 가능하게 하여, data의 자동적인 수집을 쉽게 한다.

코틀린 언어는 함수형 프로그래밍에 중점을 뒀기 때문에, batch 코딩이 쉬워졌다. 

 

 CSV 파일 읽고쓰는 방법 
- 순수 Kotlin : flexibility가 가장 좋은듯.

- kotlin-csv 라이브러리(기본라이브러리) : 매우 strict한 csv타입에 대해서는 사용할만함.

- Apache CSV : one call로 불러서 사용하기 편함. 안정적임

- FasterXML Jackson CSV : 사용법이 좀 귀찮. mapping이 필요함.

 

2. 순수 Kotlin으로 CSV 쓰기.

fun OutputStream.writeCsv(ocrRows: List<String>) {
    val writer = bufferedWriter(StandardCharsets.UTF_8)
    writer.write("""이름, 금액, 비고""")
    writer.newLine()
    ocrRows.forEach {str->
        writer.write("$str, ")
        writer.newLine()
    }
    writer.flush()
}


// 안드로이드에서는 path를 아래와 같이 잡아준다. download폴더임.
 val path =
        Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolutePath
FileOutputStream("$path/filename.csv").apply { writeCsv(rows) }

 

다음과 같이 DeviceManager에서 생성된 파일 확인 가능하다.

* 파일 읽기

val path =
        Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolutePath
    val response =""
val file = File(path, "responses.txt")
// 1줄짜리 input을 읽어서 아래와 같이 불러왔음.
Files.readAllLines(file.toPath()).forEach{response = it}

 

이외에도 kotlin-csv 라이브러리, Apache CSV LIB, FasterXML Jackson CSV 라이브러리가 있다고 한다.

 

4. Apache CSV writing

시도했으나 라이브러리 불러오는 과정에서 에러 떠서 그냥 pass...

순수 Kotlin이 제일 속편하다...

 

6. 결론

Apache CSV, Jackson CSV가 일반적으로 다른 방법보다 좋다고 볼 수 있다. Apache는 안정적이며, Jackson은 토큰화된 행들과 data class를 매끄럽게 연결해준다. 

Jackson은 환경 세팅이 좀 귀찮은 반면, Apache는 매우 간단히 쓸 수 있어서 좋다고 한다.

 

반응형

댓글