では、最後に生成したコードを使い、CSVファイルの入出力を行ってみましょう。
以下にCSVファイルの入力クラス、出力クラスのサンプルを示します。サンプルを実行し、CSVファイルの読み込み処理(Eclipseのコンソールを確認)、書き込み処理(CSVファイルが更新されていることを確認)ができれば、動作確認完了です。
サンプルの動作確認の際は、sample.csvを作成し、プロジェクトのフォルダ直下に配置してください。
7777777,鈴木一郎,東京都,1234,23,2006/12/01
import java.io.*; import java.text.SimpleDateFormat; import myapp.csv.io.*; import myapp.csv.record.SampleCsvRecord; public class CsvRead { public static void main(String[] args) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd"); SampleCsvReader csvReader = null; try { // Sample.CSVを開く BufferedReader reader = new BufferedReader( new InputStreamReader( new FileInputStream("sample.csv"))); // Sample.CSV読み取り用クラスを生成 csvReader = new SampleCsvReader(reader); // ファイルを1行ずつ読み込む for (;;) { // 1行読み込む。 // 読み込む行が存在しない場合はnullを返す SampleCsvRecord record = csvReader.readRecord(); // 読み込む行が存在しなかった場合は読み込みを終了 if (record == null) { break; } // 結果の出力 // (blancoCsvで作成したレコードのgetterを利用) System.out.println( "[" + csvReader.getLineCounter() + "件目]"); System.out.println("顧客ID:" + record.getCustomerid()); System.out.println("氏名:" + record.getName()); System.out.println("住所:" + record.getAddress()); System.out.println("商品ID:" + record.getProductid()); System.out.println("個数:" + record.getNumber()); System.out.println("注文日:" + dateFormat.format(record.getOrderdate())); } } } }
import java.io.*; import java.util.Date; import myapp.csv.io.*; import myapp.csv.record.SampleCsvRecord; public class CsvWrite { public static void main(String[] args) { SampleCsvWriter csvWriter = null; try { // Sample.CSVを開く BufferedWriter writer = new BufferedWriter( new OutputStreamWriter( new FileOutputStream("sample.csv"))); // Sample.CSV書き込み用クラスを生成 csvWriter = new SampleCsvWriter(writer); // 1行分のデータを作成 // (blancoCsvで作成したレコードのsetterを利用) SampleCsvRecord record = new SampleCsvRecord(); record.setCustomerid(new Integer(12345678)); record.setName("山田太郎"); record.setAddress("大阪府"); record.setProductid(new Integer(9999)); record.setNumber(new Integer(14)); record.setOrderdate(new Date()); // 1行書き込む csvWriter.writeRecord(record); csvWriter.flush(); csvWriter.close(); } catch (BlancoCsvIOException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
サンプルをご覧になると分かるように、CSVファイルの1レコード(1行)ずつ入出力を行います。ArrayListやarrayを利用して、一括処理する場合、DB内の大量データを一括処理する際に大量のメモリが必要になりますが、1レコードずつ処理すれば、テーブルの1レコードずつCSVファイルへ書き出していけばよいので、少ないリソースで処理できます。
このように、現場での開発ノウハウを生かしたソースコードが生成されるため、製造のコスト削減だけでなく、品質の向上が期待できます。
本稿では、CSVファイルの読み書きを行うコードを生成するblancoCsvを紹介しました。blanco Frameworkシリーズでは、ほかにもさまざまなコードを生成するプラグインを提供しており、これらのプラグイン/ツールを利用することにより開発を効率化できます。興味がある方はぜひblanco Frameworkのほかのプラグインも利用してみてください。blanco Frameworkシリーズの一覧は、以下のドキュメントをご覧ください。
菅原 康友(すがわら やすとも)
2002年 NTTデータ入社。レガシーシステムの方式設計を経験後、2005年より現在の部署に異動し、Javaと出会う。
日ごろは社内フレームワークの開発や、方式支援業務に携わっている。
Copyright © ITmedia, Inc. All Rights Reserved.