前回のエントリーではJSfでのCSVダウンロードについて書きましたが、実際にCSVの配列を作る処理について書きます。
CSVのアップロードの時に使ったのと同じCommonsCSVを使います。
Contents
ファイルへの保存
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 |
/** * List.String[]を受けて,CSVファイルを保存 * * @param filePath ファイルパス * @param recordList レコードリスト * @param header ヘッダー */ public void saveCsvFile(String filePath, List<String[]> recordList, String... header) { try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(filePath)), "Windows-31J"))) { CSVPrinter printer = CSVFormat.EXCEL //ダブルクオートでくくる .withQuoteMode(QuoteMode.ALL) //ヘッダー行 .withHeader(header) //ファイルに出力 .print(bw); //レコードの読み取り printer.printRecords(recordList); } catch (FileNotFoundException e) { Logger.getLogger(CsvManager.class.getName()).log(Level.SEVERE, null, e); } catch (IOException e) { Logger.getLogger(CsvManager.class.getName()).log(Level.SEVERE, null, e); } } |
CSVを文字列として出力
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 |
/** * CSVデータを文字列として作成 * * @param recordList レコードリスト * @param header CSVヘッダー * @return 文字列 */ public String makeCsvFile(List<String[]> recordList, String... header) { StringBuilder sb = new StringBuilder(); try { CSVPrinter printer = CSVFormat.EXCEL //ダブルクオートでくくる .withQuoteMode(QuoteMode.ALL) //ヘッダー行 .withHeader(header) //出力 .print(sb); //レコードの読み取り printer.printRecords(recordList); } catch (IOException ex) { Logger.getLogger(CsvManager.class.getName()).log(Level.SEVERE, null, ex); } return sb.toString(); } |
共通するのは2つともList<String[]>でデータを渡すことですね。
※ちなみにwithHeaderの引数がない状態だと1行目を自動的にヘッダーとみなします。
引数があってnullではだめです。
参考リンク
commonsCSVの解説は↓ここが一番っぽいです。
海外サイトですが下記リンクが参考になりました。