OpenCSV 라이브러리를 사용하여 CSV 파일 읽기
이 단계에서는 OpenCSV 라이브러리를 사용하여 CSV 파일을 읽는 세 번째 방법을 구현합니다. OpenCSV 는 쉼표 또는 따옴표로 묶인 줄 바꿈이 포함된 필드와 같은 복잡한 시나리오를 처리하는 강력한 CSV 구문 분석 기능을 제공하는 타사 라이브러리입니다.
OpenCSV 이해
OpenCSV 는 모든 기본 CSV 형식 변형을 지원하는 Java 용 CSV 파서 라이브러리입니다. 이전 접근 방식과 달리 OpenCSV 는 쉼표로 간단하게 분할하면 손상될 수 있는 쉼표, 줄 바꿈 및 기타 특수 문자를 포함하는 따옴표로 묶인 필드를 제대로 처리합니다.
OpenCSV 설정
먼저 OpenCSV 라이브러리와 종속성을 다운로드해 보겠습니다.
cd ~/project
mkdir -p lib
curl -L -o lib/opencsv-5.7.1.jar https://repo1.maven.org/maven2/com/opencsv/opencsv/5.7.1/opencsv-5.7.1.jar
curl -L -o lib/commons-lang3-3.12.0.jar https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar
curl -L -o lib/commons-text-1.10.0.jar https://repo1.maven.org/maven2/org/apache/commons/commons-text/1.10.0/commons-text-1.10.0.jar
curl -L -o lib/commons-beanutils-1.9.4.jar https://repo1.maven.org/maven2/commons-beanutils/commons-beanutils/1.9.4/commons-beanutils-1.9.4.jar
curl -L -o lib/commons-collections-3.2.2.jar https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2.jar
curl -L -o lib/commons-logging-1.2.jar https://repo1.maven.org/maven2/commons-logging/commons-logging/1.2/commons-logging-1.2.jar
더 복잡한 CSV 파일 만들기
쉼표가 있는 따옴표로 묶인 필드를 포함하는 더 복잡한 CSV 파일을 만들어 보겠습니다.
echo 'name,description,price
"Laptop","High-performance laptop, with SSD",999.99
"Smartphone","Latest model, with dual camera",499.99
"Headphones","Noise-canceling, wireless",149.99' > ~/project/products.csv
OpenCSV 를 사용한 CSV 읽기 구현
이제 OpenCSV 를 사용하여 CSV 파일을 읽도록 CSVReaderDemo.java 파일을 업데이트해 보겠습니다. 파일의 전체 내용을 다음 코드로 바꿉니다.
import com.opencsv.CSVReader;
import com.opencsv.exceptions.CsvValidationException;
import java.io.FileReader;
import java.io.IOException;
public class CSVReaderDemo {
public static void main(String[] args) {
System.out.println("Reading CSV using OpenCSV");
// Path to our CSV file with complex data
String csvFile = "products.csv";
try (CSVReader reader = new CSVReader(new FileReader(csvFile))) {
// Read and print the header
String[] header = reader.readNext();
if (header != null) {
System.out.println("\nHeader: " + String.join(", ", header));
}
// Read and print each line
String[] nextLine;
int rowNumber = 1;
System.out.println("\nData read from CSV file:");
while ((nextLine = reader.readNext()) != null) {
System.out.println("Row " + rowNumber + ":");
for (int i = 0; i < nextLine.length; i++) {
System.out.println(" " + header[i] + ": " + nextLine[i]);
}
rowNumber++;
System.out.println();
}
} catch (IOException | CsvValidationException e) {
System.err.println("Error reading the CSV file: " + e.getMessage());
e.printStackTrace();
}
}
}
업데이트된 코드를 컴파일하고 실행해 보겠습니다.
cd ~/project
javac -cp ".:lib/*" -d . src/CSVReaderDemo.java
java -cp ".:lib/*" CSVReaderDemo
다음과 유사한 출력을 볼 수 있습니다.
Reading CSV using OpenCSV
Header: name, description, price
Data read from CSV file:
Row 1:
name: Laptop
description: High-performance laptop, with SSD
price: 999.99
Row 2:
name: Smartphone
description: Latest model, with dual camera
price: 499.99
Row 3:
name: Headphones
description: Noise-canceling, wireless
price: 149.99
코드 설명
- OpenCSV 라이브러리 및 Java I/O 에서 필요한 클래스를 가져옵니다.
- CSV 파일의 경로 (
products.csv) 를 정의합니다.
- CSV 파일을 읽기 위해
CSVReader 객체를 생성합니다.
reader.readNext()를 사용하여 헤더 행을 읽고 나중에 사용하기 위해 저장합니다.
- 그런 다음 더 이상 행이 없을 때까지 루프에서
reader.readNext()를 사용하여 각 후속 행을 읽습니다.
- 각 행에 대해 해당 헤더와 함께 각 필드를 출력합니다.
OpenCSV 라이브러리는 쉼표가 따옴표로 묶인 필드를 올바르게 구문 분석하여 복잡한 CSV 형식을 자동으로 처리합니다. 따라서 복잡한 데이터를 포함할 수 있는 실제 CSV 파일에 이상적입니다.
OpenCSV 의 장점
OpenCSV 는 기본 접근 방식에 비해 몇 가지 장점을 제공합니다.
- 쉼표, 줄 바꿈 및 기타 특수 문자를 포함하는 따옴표로 묶인 필드를 올바르게 처리합니다.
- 빈 (Java 객체) 으로 읽기 위한 내장 지원을 제공합니다.
- 사용자 지정 구분 기호, 따옴표 문자 및 이스케이프 문자와 같은 고급 기능을 지원합니다.
- 대용량 CSV 파일을 효율적으로 처리합니다.
CSV 파일을 처리하는 대부분의 실제 응용 프로그램의 경우 OpenCSV 와 같은 전용 라이브러리를 사용하는 것이 좋습니다.