差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| study:java:csv [2008/04/03 08:34] – banana | study:java:csv [2015/07/23 04:33] (現在) – [Issue] banana | ||
|---|---|---|---|
| 行 5: | 行 5: | ||
| データ交換に使われることも多い。\\ | データ交換に使われることも多い。\\ | ||
| 実体はテキストファイルであるため、テキストエディタやワープロなどで開いて直接編集することも可能。\\ | 実体はテキストファイルであるため、テキストエディタやワープロなどで開いて直接編集することも可能。\\ | ||
| - | 今回はJavaでCSV形式を書き込む方法を著したいと思う。 | + | 今回はJavaでCSV形式を書き出す方法を紹介する。 |
| {{keywords> | {{keywords> | ||
| + | ~~META: | ||
| + | title=How to write out a list of data with a CSV format | ||
| + | ~~ | ||
| 行 14: | 行 17: | ||
| ===== CSV Specification ===== | ===== CSV Specification ===== | ||
| - | you can refer to [[study: | + | you can review an original version from [[study: |
| < | < | ||
| CSV file | CSV file | ||
| 行 28: | 行 31: | ||
| </ | </ | ||
| - | ====== Text Output | + | |
| + | ===== Text Output ===== | ||
| まずはCSV形式に合う文字列を書き出すことだが、便宜のため書き出す項目がリストに入っていると想定しよう。\\ | まずはCSV形式に合う文字列を書き出すことだが、便宜のため書き出す項目がリストに入っていると想定しよう。\\ | ||
| - | 項目が入るリストと列を格納するリストが必要となる。リストにリストがあるイメージかな。\\ | + | 項目が入るリストと列を格納するリストが必要となる。リストの中にリストが入っているイメージだ。\\ |
| ロジックは意外と簡単だ。リストの項目を順番ごとに**%%StringBuffer%%**に追加していきながらカンマをくっつけることだ。\\ | ロジックは意外と簡単だ。リストの項目を順番ごとに**%%StringBuffer%%**に追加していきながらカンマをくっつけることだ。\\ | ||
| - | リストの最後の項目にあったらカンマを削って改行文字を入れ替われば良い。\\ | + | リストの最後の項目にあったらカンマを削って改行文字を入れ替えれば良い。\\ |
| - | ソースコードは以下のとおり。 | + | ソースコードを次に示す。 |
| <code java> | <code java> | ||
| public static String getCsvOutputString(ArrayList list) throws UnsupportedEncodingException { | public static String getCsvOutputString(ArrayList list) throws UnsupportedEncodingException { | ||
| 行 63: | 行 67: | ||
| } | } | ||
| - | System.out.println(new String(_sb)); | + | System.out.println(_sb.toString()); |
| - | return | + | return _sb.toString(); |
| } | } | ||
| </ | </ | ||
| - | ====== Set Response Header | + | |
| + | ===== Set Response Header ===== | ||
| CSVファイルで出力するにはブラウザにファイルの形式や名前、容量などを知らせる必要がある。\\ | CSVファイルで出力するにはブラウザにファイルの形式や名前、容量などを知らせる必要がある。\\ | ||
| 行 81: | 行 86: | ||
| - | ====== Write out to output stream | + | |
| + | ===== Write out to output stream ===== | ||
| %%HttpServletResponse%%から**%%OutputStream%%**を取得してこのストリムに | %%HttpServletResponse%%から**%%OutputStream%%**を取得してこのストリムに | ||
| 前のリストから作り出した文字列を出力する。\\ | 前のリストから作り出した文字列を出力する。\\ | ||
| 行 105: | 行 111: | ||
| - | ====== Issue ====== | + | |
| - | **CSV**の形式上、カンマで区切る為、もしカンマが含まれていたら不具合が発生する。\\ | + | |
| - | また、列ごとに改行文字(CR-LF)((CR: | + | |
| + | ===== Issue ===== | ||
| + | **CSV**の仕様上、カンマで区切る為、もしカンマが含まれていたら不具合が発生する。\\ | ||
| + | また、列の最後に改行文字(CR-LF)((CR: | ||
| そこで、この問題に対応する**Tip**を紹介したいと思う。\\ | そこで、この問題に対応する**Tip**を紹介したいと思う。\\ | ||
| カンマ(, | カンマ(, | ||
| - | 改行文字の場合は**CR-LF(\r\n)**ではなく**LF(\n)**を使うことを奨励している。\\ | + | 改行文字の場合は**CR-LF(\r\n)**ではなく**LF(\n)**を使うことを奨励している。 |
| + | ([[wp> | ||
| 以上二つの点を踏まえて対応する方法がこれだ。 | 以上二つの点を踏まえて対応する方法がこれだ。 | ||
| <code java> | <code java> | ||
| 行 121: | 行 131: | ||
| // | // | ||
| _ret = temp.toString(); | _ret = temp.toString(); | ||
| - | _ret = _ret.replaceAll(" | + | |
| } | } | ||
| return _ret; | return _ret; | ||
| 行 127: | 行 137: | ||
| </ | </ | ||
| - | リストの項目を全体にダブルクォーテーション(" | + | リストの項目全体をダブルクォーテーション(" |
| - | ====== Reference | + | |
| + | |||
| + | |||
| + | ===== Reference ===== | ||
| -[[http:// | -[[http:// | ||
| -[[http:// | -[[http:// | ||
| + | ~~DISCUSSION~~ | ||