OpenCSV ライブラリを使用した CSV ファイルの読み込み
このステップでは、OpenCSV ライブラリを使用して CSV ファイルを読み込む 3 番目の方法を実装します。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 読み込みの実装
次に、CSVReaderDemo.javaファイルを更新して、OpenCSV を使用して CSV ファイルを読み込みましょう。ファイルのすべての内容を次のコードに置き換えます。
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 は、基本的な方法よりもいくつかの利点を提供します。
- カンマ、改行、およびその他の特殊文字を含む引用符で囲まれたフィールドを正しく処理します。
- Bean(Java オブジェクト)への読み込みの組み込みサポートを提供します。
- カスタム区切り文字、引用符文字、およびエスケープ文字などの高度な機能をサポートしています。
- 大規模な CSV ファイルを効率的に処理します。
CSV ファイルを扱うほとんどの実際のアプリケーションでは、OpenCSV のような専用ライブラリを使用することが推奨されるアプローチです。