Post

Java CSV 파일을 배열로 읽기

1. java.io의 BufferedReader

먼저 BufferedReader에서 readLine()을 사용하여 레코드를 한 줄씩 읽는다. 그런 다음 쉼표 구분 기호에 따라 줄을 토큰으로 나눈다.

1
2
3
4
5
6
7
8
List<List<String>> records = new ArrayList<>();
try (BufferedReader br = new BufferedReader(new FileReader("book.csv"))) {
    String line;
    while ((line = br.readLine()) != null) {
        String[] values = line.split(COMMA_DELIMITER);
        records.add(Arrays.asList(values));
    }
}

보다 정교한 CSV(예: 따옴표 또는 쉼표를 값으로 포함)는 이 접근 방식에서 의도한 대로 구문 분석되지 않는다.

2. java.util의 Scanner

다음으로 java.util.Scanner를 사용 하여 파일 내용을 실행하고 줄을 하나씩 차례로 검색한다.

1
2
3
4
5
6
List<List<String>> records = new ArrayList<>();
try (Scanner scanner = new Scanner(new File("book.csv"));) {
    while (scanner.hasNextLine()) {
        records.add(getRecordFromLine(scanner.nextLine()));
    }
}

그런 다음 라인을 구문 분석하고 배열에 저장한다.

1
2
3
4
5
6
7
8
9
10
private List<String> getRecordFromLine(String line) {
    List<String> values = new ArrayList<String>();
    try (Scanner rowScanner = new Scanner(line)) {
        rowScanner.useDelimiter(COMMA_DELIMITER);
        while (rowScanner.hasNext()) {
            values.add(rowScanner.next());
        }
    }
    return values;
}

3. OpenCSV

OpenCSV로 더 복잡한 CSV 파일을 처리할 수 있다. OpenCSV는 CSV 파일 작업을 위한 API를 제공하는 라이브러리이다.

CSVReader의 readNext() 메서드를 사용하여 파일의 레코드를 읽는다.

1
2
3
4
5
6
7
List<List<String>> records = new ArrayList<List<String>>();
try (CSVReader csvReader = new CSVReader(new FileReader("book.csv"));) {
    String[] values = null;
    while ((values = csvReader.readNext()) != null) {
        records.add(Arrays.asList(values));
    }
}

[출처 및 참고]

This post is licensed under CC BY 4.0 by the author.