logo

OpenCSVを使用したJavaでのCSVファイルの読み取り

カンマ区切り値 (CSV) ファイルは通常のプレーンテキスト ファイルであり、データを列ごとに格納し、区切り文字 (通常はカンマ , など) で分割します。

OpenCSV は Java 用の CSV パーサー ライブラリです。 OpenCSV は、実行したい基本的な CSV タイプの操作をすべてサポートしています。 Java 7 は現在、OpenCSV でサポートされている最小バージョンです。 Java 言語では、CSV ファイルを効果的に処理するためのネイティブ サポートが提供されていないため、Java で CSV ファイルを処理するために OpenCSV を使用しています。



OpenCSVの使い方

1. Maven プロジェクトの場合、OpenCSV Maven 依存関係を pom.xml ファイルに含めることができます。

HTML








<>dependency>>>> ><>groupId>>com.opencsvgroupId> opencsvartifactId>4.1バージョン> 依存関係>>>

>

>

2. Gradle プロジェクトの場合、OpenCSV 依存関係を含めることができます。

compile group: 'com.opencsv', name: 'opencsv', version: '4.1'>

3. ダウンロードできます OpenCSV Jar プロジェクトのクラスパスに含めます。

opencsv のいくつかの便利なクラス

入力信号がありません
    CSVReader – このクラスは、CSV ファイルを文字列配列のリストとして読み取る操作を提供します。 CSVWriter – このクラスを使用すると、データを CSV ファイルに書き込むことができます。 CsvToBean – このクラスは、CSV ファイルのコンテンツから Java Bean を設定する場合に使用されます。 BeanToCsv – このクラスは、Java アプリケーションから CSV ファイルにデータをエクスポートするのに役立ちます。

CSVファイルの読み込み

CSVファイルを読み込むにはCSVReaderクラスが必要です。以下は、読み取る CSV ファイルのサンプルです。

name, rollno, department, result, cgpa amar, 42, cse, pass, 8.6 rohini, 21, ece, fail, 3.2 aman, 23, cse, pass, 8.9 rahul, 45, ee, fail, 4.6 pratik, 65, cse, pass, 7.2 raunak, 23, me, pass, 9.1 suvam, 68, me, pass, 8.2>

csv ファイルは 2 つの方法で読み取ることができます。

1. データを 1 行ずつ読み取ります。 CSV ファイルを 1 行ずつ読み取る方法を見てみましょう。データを 1 行ずつ読み取るには、まず CSV ファイルの filereader オブジェクトを渡して CSVReader オブジェクトを構築して初期化する必要があります。その後、以下のコードに示すように、CSVReader オブジェクトの readNext() メソッドを呼び出してデータを 1 行ずつ読み取る必要があります。

ジャワ




行と列
// Java code to illustrate reading a> // CSV file line by line> public> static> void> readDataLineByLine(String file)> {> > >try> {> > >// Create an object of filereader> >// class with CSV file as a parameter.> >FileReader filereader =>new> FileReader(file);> > >// create csvReader object passing> >// file reader as a parameter> >CSVReader csvReader =>new> CSVReader(filereader);> >String[] nextRecord;> > >// we are going to read data line by line> >while> ((nextRecord = csvReader.readNext()) !=>null>) {> >for> (String cell : nextRecord) {> >System.out.print(cell +>' '>);> >}> >System.out.println();> >}> >}> >catch> (Exception e) {> >e.printStackTrace();> >}> }>

>

>

2. すべてのデータを一度に読み取ります。 readNext() メソッドを使用して CSV レコードを 1 つずつ読み取ります。 CSVReader には、すべてのレコードを一度にリストに読み取るための readAll() というメソッドも用意されています。

 List allData = csvReader.readAll();>

上記のコードの出力に示されているように、デフォルトで CSV ファイルを読み取る場合、ヘッダーは無視されません。リストの最初の要素をスキップする必要がある場合は、CSVReader の作成時に開始行を指定できます。

CSVReader csvReader = new CSVReaderBuilder(reader).withSkipLines(1).build();>

コード:

ジャワ




// Java code to illustrate reading a> // all data at once> public> static> void> readAllDataAtOnce(String file)> {> >try> {> >// Create an object of file reader> >// class with CSV file as a parameter.> >FileReader filereader =>new> FileReader(file);> > >// create csvReader object and skip first Line> >CSVReader csvReader =>new> CSVReaderBuilder(filereader)> >.withSkipLines(>1>)> >.build();> >List allData = csvReader.readAll();> > >// print Data> >for> (String[] row : allData) {> >for> (String cell : row) {> >System.out.print(cell +>' '>);> >}> >System.out.println();> >}> >}> >catch> (Exception e) {> >e.printStackTrace();> >}> }>

>

>

区切り文字が異なるCSVファイルの読み込み

CSV ファイルはカンマ以外の区切り文字で区切ることができます。セミコロン、パイプなど。 以下の例は、セミコロン文字で区切られた CSV ファイルのデータを読み取る方法を示しています。

セミコロンで区切られた CSV ファイルの例:

name;rollno;department;result;cgpa amar;42;cse;pass;8.6 rohini;21;ece;fail;3.2 aman;23;cse;pass;8.9 rahul;45;ee;fail;4.6 pratik;65;cse;pass;7.2 raunak;23;me;pass;9.1 suvam;68;me;pass;8.2>

カスタム区切り文字の場合、最初に特定のパーサー文字を持つ CSVParser が作成されます。

CSVParser parser = new CSVParserBuilder().withSeparator(';').build();>

次に、コンストラクタとともにCSVParser()メソッドでCSVReaderオブジェクトを作成し、作成したパーサーオブジェクトをwithCSVParserメソッドのパラメータに渡します。最後にbuildメソッドを呼び出してオブジェクトをビルドします。

CSVReader csvReader = new CSVReaderBuilder(filereader).withCSVParser(parser).build();>

コード:

ジャワ




// Java code to illustrate> // Reading CSV File with different separator> public> static> void> readDataFromCustomSeparator(String file)> {> >try> {> >// Create an object of file reader class with CSV file as a parameter.> >FileReader filereader =>new> FileReader(file);> > >// create csvParser object with> >// custom separator semi-colon> >CSVParser parser =>new> CSVParserBuilder().withSeparator(>';'>).build();> > >// create csvReader object with parameter> >// filereader and parser> >CSVReader csvReader =>new> CSVReaderBuilder(filereader)> >.withCSVParser(parser)> >.build();> > >// Read all data at once> >List allData = csvReader.readAll();> > >// Print Data.> >for> (String[] row : allData) {> >for> (String cell : row) {> >System.out.print(cell +>' '>);> >}> >System.out.println();> >}> >}> >catch> (Exception e) {> >e.printStackTrace();> >}> }>

>

>

例 – 2 つの CSV ファイル result.csv と results_semicolon_Separator.csv を読み取る
result.csv にはデフォルトの区切り文字「,」がありますが、results_semicolon_Separator.csv には「,」の代わりに区切り文字「;」があります。

YouTubeビデオVLCをダウンロードする方法

コード:

ジャワ




// Java program to illustrate reading> // two CSV files> // with different separators> > import> java.io.FileReader;> import> java.util.List;> import> com.opencsv.*;> > public> class> ReadCSVData {> >private> static> final> String CSV_FILE_PATH> >=>'D:EclipseWorkSpaceCSVOperations esults.csv'>;> >private> static> final> String CSV_FILE_CUSTOM_SEPARATOR> >=>'D:EclipseWorkSpaceCSVOperations esults_semicolon_Separator.csv'>;> > >public> static> void> main(String[] args)> >{> > >System.out.println(>'Read Data Line by Line With Header '>);> >readDataLineByLine(CSV_FILE_PATH);> >System.out.println(>'_______________________________________________'>);> > >System.out.println(>'Read All Data at Once and Hide the Header also '>);> >readAllDataAtOnce(CSV_FILE_PATH);> >System.out.println(>'_______________________________________________'>);> > >System.out.println(>'Custom Separator here semi-colon '>);> >readDataFromCustomSeparator(CSV_FILE_CUSTOM_SEPARATOR);> >System.out.println(>'_______________________________________________'>);> >}> > >public> static> void> readDataLineByLine(String file)> >{> > >try> {> > >// Create an object of filereader class> >// with CSV file as a parameter.> >FileReader filereader =>new> FileReader(file);> > >// create csvReader object passing> >// filereader as parameter> >CSVReader csvReader =>new> CSVReader(filereader);> >String[] nextRecord;> > >// we are going to read data line by line> >while> ((nextRecord = csvReader.readNext()) !=>null>) {> >for> (String cell : nextRecord) {> >System.out.print(cell +>' '>);> >}> >System.out.println();> >}> >}> >catch> (Exception e) {> >e.printStackTrace();> >}> >}> > >public> static> void> readAllDataAtOnce(String file)> >{> >try> {> > >// Create an object of filereader class> >// with CSV file as a parameter.> >FileReader filereader =>new> FileReader(file);> > >// create csvReader object> >// and skip first Line> >CSVReader csvReader =>new> CSVReaderBuilder(filereader)> >.withSkipLines(>1>)> >.build();> >List allData = csvReader.readAll();> > >// print Data> >for> (String[] row : allData) {> >for> (String cell : row) {> >System.out.print(cell +>' '>);> >}> >System.out.println();> >}> >}> >catch> (Exception e) {> >e.printStackTrace();> >}> >}> > >public> static> void> readDataFromCustomSeparator(String file)> >{> >try> {> >// Create object of filereader> >// class with csv file as parameter.> >FileReader filereader =>new> FileReader(file);> > >// create csvParser object with> >// custom separator semi-colon> >CSVParser parser =>new> CSVParserBuilder().withSeparator(>';'>).build();> > >// create csvReader object with> >// parameter filereader and parser> >CSVReader csvReader =>new> CSVReaderBuilder(filereader)> >.withCSVParser(parser)> >.build();> > >// Read all data at once> >List allData = csvReader.readAll();> > >// print Data> >for> (String[] row : allData) {> >for> (String cell : row) {> >System.out.print(cell +>' '>);> >}> >System.out.println();> >}> >}> >catch> (Exception e) {> >e.printStackTrace();> >}> >}> }>

>

>

出力:

_______________________________________________ Read Data Line by Line With Header name rollno department result cgpa amar 42 cse pass 8.6 rohini 21 ece fail 3.2 aman 23 cse pass 8.9 rahul 45 ee fail 4.6 pratik 65 cse pass 7.2 raunak 23 me pass 9.1 suvam 68 me pass 8.2 _______________________________________________ Read All Data at Once and Hide the Header also amar 42 cse pass 8.6 rohini 21 ece fail 3.2 aman 23 cse pass 8.9 rahul 45 ee fail 4.6 pratik 65 cse pass 7.2 raunak 23 me pass 9.1 suvam 68 me pass 8.2 _______________________________________________ Custom Separator here semi-colon name rollno department result cgpa amar 42 cse pass 8.6 rohini 21 ece fail 3.2 aman 23 cse pass 8.9 rahul 45 ee fail 4.6 pratik 65 cse pass 7.2 raunak 23 me pass 9.1 suvam 68 me pass 8.2 _______________________________________________>

今後の記事では、OpenCSV を使用した CSV ファイルの操作をさらに追加する予定です。
参考文献: CSVReader クラスのドキュメントOpenCSV ドキュメント