大量のデータをCSVファイル等に出力する際は、出力データ作成用のプログラムを作成しておくと便利である。今回は、以下のUSER_DATAテーブルに取込を行うためのCSVファイルを出力するプログラムを作成してみたので、共有する。
前提条件
下記記事のIntelliJ IDEA Community版をダウンロード済であること。
また、下記のように、「demoJava」というJavaプロジェクトを作成済であること。
なお、IntelliJ IDEA上でJavaプロジェクトを作成する方法については、IntelliJ IDEA Community版をダウンロードする記事内の、「IntelliJ IDEA上でのJavaプロジェクトの作成・実行」を参照のこと。
サンプルプログラムの作成
作成したサンプルプログラムの構成は以下の通り。
なお、上記の赤枠は、今回新規で作成したプログラムである。
ソースコードの内容は以下の通りで、C:\tmpフォルダ下に、「user_data_(fileIdxの値).csv」というファイルを作成し、IDが(startIdxの値)から(dataCnt数)分のデータを出力するようになっている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | package demo.java; import java.io.File; import java.io.FileWriter; public class MakeUserDataCsv { /** ファイル名に付与するインデックス */ private static final int fileIdx = 1; /** IDの開始位置 */ private static final int startIdx = 1; /** 書き込みデータ数 */ private static final int dataCnt = 5; /** * テスト用CSVデータを作成するメイン処理 * @param args 起動時に受け取る引数 */ public static void main(String[] args) { // 書き込み用ファイルを作成する(ファイルが存在する場合は上書き) String newFileName = "c:\\tmp\\user_data_" + fileIdx + ".csv"; File newFile = new File(newFileName); try (FileWriter fw = new FileWriter(newFile)) { // ファイルの先頭にカラム行を設置する fw.write("ID,NAME,BIRTH_YEAR,BIRTH_MONTH,BIRTH_DAY,SEX,MEMO"); fw.write(System.lineSeparator()); // ファイルにテストデータを書き込む // その際、生年月日は2012年1月15日で固定とする for (int i = startIdx; i < startIdx + dataCnt; i++) { String zenkakuNum = changeNumHalfToFull(i); int sexCode = (i - 1) % 2 + 1; fw.write(i + ",\"テスト プリン" + zenkakuNum + "\",2012,1,15,\"" + sexCode + "\",\"テスト" + zenkakuNum + "\""); fw.write(System.lineSeparator()); } System.out.println("ファイルの書き込みが完了しました。ファイル名:" + newFileName + ",データ数:" + dataCnt); } catch (Exception ex) { System.err.println(ex); } } /** * 半角数字を全角数字に変換する. * @param num 変換前の半角数字 * @return 全角数字 */ private static String changeNumHalfToFull(int num) { String result = null; StringBuilder sb = new StringBuilder(String.valueOf(num)); for (int i = 0; i < sb.length(); i++) { int c = (int) sb.charAt(i); if (c >= 0x30 && c <= 0x39) { sb.setCharAt(i, (char) (c + 0xFEE0)); } } result = sb.toString(); return result; } } |
サンプルプログラムの実行結果
サンプルプログラムの実行結果は、以下の通り。
1) fileIdx, startIdx, dataCntが以下の状態で実行したときのコンソールログと出力されたCSVファイルの内容は以下の通りで、「user_data_1.csv」というファイルにID=1~5のデータが出力されていることが確認できる。
2) fileIdx, startIdx, dataCntが以下の状態で実行したときのコンソールログと出力されたCSVファイルの内容は以下の通りで、「user_data_2.csv」というファイルにID=21~30のデータが出力されていることが確認できる。
要点まとめ
- 大量のデータをCSVファイル等に出力する際は、出力データ作成用のプログラムを作成しておくと便利である。