では、最後に生成したコードを使い、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.