OpenCSVはJavaのCSVファイルを簡単に操作するためのライブラリで、CSVファイルの読み込みや書き込みを簡単に行うことができます。
以下、業務上で利用したOpenCSVでのCSVファイルの読み込み方法と、注意点について説明します。
OpenCSVを使用するには、まず依存関係をプロジェクトに追加する必要があります。
Gradleの場合は、build.gradleに以下を追加します。
implementation ‘com.opencsv:opencsv:5.5.2’
OpenCSVを使ってCSVファイルを読み込むには、通常CSVReader
クラスを使用します。
以下の例では、CSVファイルを行単位で読み込む方法を説明します。
まず、CSVファイルの各行をリストとして取得するシンプルな方法です。
import com.opencsv.CSVReader; import java.io.FileReader; import java.io.IOException; public class CsvReaderExample { public static void main(String[] args) { try (CSVReader reader = new CSVReader(new FileReader("sample.csv"))) { String[] line; while ((line = reader.readNext()) != null) { // line[0], line[1], ... 各列のデータにアクセス System.out.println("Column 1: " + line[0] + ", Column 2: " + line[1]); } } catch (IOException e) { e.printStackTrace(); } } }
OpenCSVでCSVファイルを扱う際に注意すべきポイントをいくつか挙げます。
(1) データのフォーマット
CSVファイルにはデフォルトでカンマが区切り文字として使われますが、タブやセミコロンなど他の文字が使われる場合もあります。その場合は、CSVReaderで区切り文字を指定する必要があります。
(2) 例外処理
ファイルが存在しない、またはフォーマットが異なる場合にはIOExceptionやCsvValidationExceptionが発生します。これを適切に処理することが重要です。
(3) 特殊文字や改行の扱い
フィールド内にカンマ、引用符、改行などが含まれる場合、それらをエスケープする処理が必要です。OpenCSVはこれらをデフォルトで処理しますが、独自のフォーマットがある場合はエスケープ方法をカスタマイズすることもできます。
(4) メモリ使用量
大きなCSVファイルを読み込む際にはメモリ使用量に注意が必要です。非常に大きなファイルを一括で読み込むとメモリ不足になる可能性があるため、行ごとに処理を行うストリーム方式での読み込みを検討すると良いでしょう。
(5) ヘッダーの扱い
ヘッダー行があるかどうかで処理が異なります。CSVReaderでヘッダー行を無視する場合はwithSkipLines(1)を利用するか、CsvToBeanBuilderを使ってヘッダー行を読み飛ばす設定を行います。
最後にOpenCSVを使うことで、CSVファイルの読み込み処理が簡単に行えるようになります。基本的な使い方とともに、データフォーマットの違いやメモリの問題にも注意して設計することで、より安全かつ効率的なCSVデータの処理が可能です。次回は「CSVファイルからJavaオブジェクトを読み込む方法」を紹介します。