Java - OpenCsv로 CSV 파일 읽고 쓰는 방법

JS · 15 Jan 2020

Java에서 CSV 파일을 읽거나 쓸 때 OpenCsv라는 라이브러리를 사용할 수 있습니다. 물론, 간단한 CSV 파일을 만드신다면 직접 구현하실 수도 있습니다.

저는 간단한 CSV 파일만 생성하려고 했기 때문에, 읽고/쓰는 방법만 구현해보았습니다. 사이트에 들어가서 예제를 보시면, 고급스러운 방법으로 효율적인 CSV 파일을 만들 수 있도록 가이드를 합니다.

OpenCsv의 고급 기능을 사용하신다면 OpenCsv를 참고하시면 좋을 것 같습니다.

라이브러리 설정

저는 Gradle로 프로젝트를 만들었습니다. gradle을 사용하시면 다음과 같이 의존성을 설정하시면 됩니다.

dependencies {
    ...
    implementation group: 'com.opencsv', name: 'opencsv', version: '4.4'
}

Write CSV

다음은 CSV 파일을 만드는 예제입니다.

package example;

import com.opencsv.CSVReader;
import com.opencsv.CSVWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class OpenCsv {

    public static void writeDataToCsv(String filePath) throws IOException {
        CSVWriter writer = new CSVWriter(new FileWriter(filePath));
        String[] entries = "EW#City#State".split("#");  // 1
        writer.writeNext(entries);  // 2

        String[] entries1 = {"W", "Youngstown", "OH"};  // 3
        writer.writeNext(entries1);

        String[] entries2 = {"W", "Williamson", "WV"};
        writer.writeNext(entries2);

        writer.close();
    }

    public static void main(String args[]) throws IOException {
        writeDataToCsv("./sample.csv");
    }
}
  1. split()을 이용하여 문자열 배열을 만들 수 있습니다.
  2. writeNext()을 호출하면 인자가 CSV 파일에 저장이 됩니다.
  3. 직접 배열에 아이템을 넣어도 됩니다.

생성된 파일의 내용은 다음과 같습니다.

"EW","City","State"
"W","Youngstown","OH"
"W","Williamson","WV"

Read CSV

다음은 CSV 파일을 만들고, CSV 파일을 읽어서 데이터를 출력하는 예제입니다.

package example;

import com.opencsv.CSVReader;
import com.opencsv.CSVWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class OpenCsv {

    public static void writeDataToCsv(String filePath) throws IOException {
        CSVWriter writer = new CSVWriter(new FileWriter(filePath));
        String[] entries = "EW#City#State".split("#");  // 1
        writer.writeNext(entries);

        String[] entries1 = {"W", "Youngstown", "OH"};  // 2
        writer.writeNext(entries1);

        String[] entries2 = {"W", "Williamson", "WV"};
        writer.writeNext(entries2);

        writer.close();
    }

    public static void readDataFromCsv(String filePath) throws IOException {
        CSVReader reader = new CSVReader(new FileReader(filePath)); // 1
        String [] nextLine;
        while ((nextLine = reader.readNext()) != null) {   // 2
            for (int i = 0; i < nextLine.length; i++) {
                System.out.println(i + " " + nextLine[i]);
            }
            System.out.println();
        }
    }


    public static void main(String args[]) throws IOException {
        writeDataToCsv("./sample.csv");
        readDataFromCsv("./sample.csv");
    }
}
  1. CSVReader를 생성합니다.
  2. readNext()로 CSV 파일을 한줄 씩 읽을 수 있습니다. 아이템 개수만큼 배열이 리턴됩니다.

실행 결과는 다음과 같습니다.

0 EW
1 City
2 State

0 W
1 Youngstown
2 OH

0 W
1 Williamson
2 WV

참고

댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha