1。概要
Apache Commons CSVライブラリには、CSVファイルを作成および読み取るための多くの便利な機能があります。
このクイックチュートリアルでは、簡単な例を示して、このライブラリを利用する方法を説明します。
2.Mavenの依存関係
まず、Mavenを使用してこのライブラリの最新バージョンをインポートします。
org.apache.commons commons-csv 1.4
このライブラリの最新バージョンを確認するには、こちらにアクセスしてください。
3.CSVファイルの読み取り
本の属性を含むbook.csvという次のCSVファイルについて考えてみます。
author,title Dan Simmons,Hyperion Douglas Adams,The Hitchhiker's Guide to the Galaxy
それをどのように読むことができるか見てみましょう:
Map AUTHOR_BOOK_MAP = new HashMap() { { put("Dan Simmons", "Hyperion"); put("Douglas Adams", "The Hitchhiker's Guide to the Galaxy"); } }); String[] HEADERS = { "author", "title"}; @Test public void givenCSVFile_whenRead_thenContentsAsExpected() throws IOException { Reader in = new FileReader("book.csv"); Iterable records = CSVFormat.DEFAULT .withHeader(HEADERS) .withFirstRecordAsHeader() .parse(in); for (CSVRecord record : records) { String author = record.get("author"); String title = record.get("title"); assertEquals(AUTHOR_BOOK_MAP.get(author), title); } }
ヘッダーであるため、最初の行をスキップした後、CSVファイルのレコードを読み取っています。
CSVファイルの形式を指定するCSVFormatにはさまざまな種類があり、その例を次の段落で確認できます。
4.CSVファイルの作成
上記と同じCSVファイルを作成する方法を見てみましょう。
public void createCSVFile() throws IOException { FileWriter out = new FileWriter("book_new.csv"); try (CSVPrinter printer = new CSVPrinter(out, CSVFormat.DEFAULT .withHeader(HEADERS))) { AUTHOR_BOOK_MAP.forEach((author, title) -> { printer.printRecord(author, title); }); } }
CSVFormat宣言で指定したため、新しいCSVファイルは適切なヘッダーで作成されます。
5.ヘッダーと読み取り列
ヘッダーの読み取りと書き込みにはさまざまな方法があります。同様に、列の値を読み取るにはさまざまな方法があります。
それらを1つずつ見ていきましょう。
5.1。インデックスによる列へのアクセス
これは、列の値を読み取るための最も基本的な方法です。これは、CSVファイルのヘッダーが不明な場合に使用できます。
Reader in = new FileReader("book.csv"); Iterable records = CSVFormat.DEFAULT.parse(in); for (CSVRecord record : records) { String columnOne = record.get(0); String columnTwo = record.get(1); }
5.2。事前定義されたヘッダーによる列へのアクセス
これは、インデックスによるアクセスと比較した場合、列にアクセスするためのより直感的な方法です。
Iterable records = CSVFormat.DEFAULT .withHeader("author", "title").parse(in); for (CSVRecord record : records) { String author = record.get("author"); String title = record.get("title"); }
5.3。列挙型をヘッダーとして使用する
列の値にアクセスするために文字列を使用すると、エラーが発生しやすくなります。文字列の代わりに列挙型を使用すると、コードがより標準化され、理解しやすくなります。
enum BookHeaders { author, title } Iterable records = CSVFormat.DEFAULT .withHeader(BookHeaders.class).parse(in); for (CSVRecord record : records) { String author = record.get(BookHeaders.author); String title = record.get(BookHeaders.title); }
5.4。ヘッダー行をスキップする
通常、CSVファイルの最初の行にはヘッダーが含まれています。したがって、ほとんどの場合、それをスキップして2行目から読み取りを開始しても安全です。
これにより、ヘッダーアクセス列の値が自動検出されます。
Iterable records = CSVFormat.DEFAULT .withFirstRowAsHeader().parse(in); for (CSVRecord record : records) { String author = record.get("author"); String title = record.get("title"); }
5.5。ヘッダー付きのファイルの作成
同様に、ヘッダーを含む最初の行を含むCSVファイルを作成できます。
FileWriter out = new FileWriter("book_new.csv"); CSVPrinter printer = CSVFormat.DEFAULT .withHeader("author", "title").print(out);
6.結論
簡単な例を通して、ApacheのCommonsCSVライブラリの使用法を紹介しました。ライブラリの詳細については、こちらをご覧ください。
この記事のコードはGithubで入手できます。