Kotlin csv 읽기 & 쓰기
업데이트:
카테고리: Kotlin
/-
csv 파일을 읽는데 필요한 라이브러리
implementation "com.opencsv:opencsv:4.4"
-
csv 파일 읽기
val reader = Files.newBufferedReader(Paths.get("app/src/main/res/input-file/order_separator_${country}.csv"), Charsets.UTF_8) val parser = CSVParserBuilder() .withSeparator(Char(124)) .withQuoteChar(CSVParser.DEFAULT_QUOTE_CHARACTER) .withEscapeChar(CSVParser.DEFAULT_ESCAPE_CHARACTER) .build() val csvReader = CSVReaderBuilder(reader) .withCSVParser(parser) .build() val recodes = csvReader.readAll() val newRecode = mutableListOf<Array<String>>() for (recode in recodes) { if (recode[3] != "주문번호정보1") { recode[3] = "${recode[3]}${inputNumber}" } newRecode.add(recode) }
Files.newBufferedReader()
: 파일의 경로를 지정CSVParserBuilder()
: 파싱할 옵션 설정-
Separator
: csv파일의 구분자 설정기본은
,
으로 설정되어 있지만, csv 파일 내부 데이터에 , 가 포함된 데이터가 많아|
로 설정-
맥에서의 구분자 변경
맥에서는 csv 저장시 구분자 변경을 따로 할 수 가 없어, 윈도우에서 구분자를 변경 후 넘겨받음
-
-
QuoteChar
: 따옴표 허용 여부?구분자가 포함되어 있는 데이터의 경우
"
를 사용하여 하나의 데이터로 묶어줄 수 있다. -
EsacpeChar
: recode 구분자?
-
val writer = Files.newBufferedWriter(Paths.get("app/src/main/res/output-file/order_${country}_${inputNumber}.csv"), Charset.forName("UTF-8")) val csvWriter = CSVWriterBuilder(writer) .withSeparator(CSVWriter.DEFAULT_SEPARATOR) .withQuoteChar(CSVWriter.DEFAULT_QUOTE_CHARACTER) .withEscapeChar(CSVWriter.DEFAULT_ESCAPE_CHARACTER) .withLineEnd(CSVWriter.DEFAULT_LINE_END) .build() csvWriter.writeAll(newRecode) for (i in newRecode[2]) { print("${i}, ") } println() print("파일 생성 : order_${country}_${inputNumber}\n") csvWriter.close() writer.close()
File.newBufferedWriter()
: csv을 저장할 파일 위치 및 이름 작성csvWriterBiluder()
: csv를 저장할 규칙 지정write
: 데이터 작성csvWriter.close()
: 파일 저장
저장된 파일은 텍스터 에디터나 Numbers에서는 정상적으로 출력되나, excel을 통해서 열면 한글이 깨지는 현상 존재
그래서 데이터 가져오기를 통해서 저장된 csv파일을 불러와야 한글이 깨지지 않음