Java:CSVパーサを作る(その1) - 簡易パーサ
データベースやExcelなどにデータをインポート・エクスポートする際に使用されるファイルフォーマットとしてCSVがあります。
CSVを単にカンマでフィールドを区切り,改行でレコードを区切ったテキストデータと見るならば,JavaでCSVファイルをインポートしてデータベースに読み込ませるなどの処理を行うCSVパーサを作るには,BufferedReaderクラスのreadLineメソッドでレコードを取り出し,Stringクラスのsplitメソッドでフィールドに分割すれば,それでCSVパーサができあがります。
この場合の具体的なプログラムを以下に例示します。
■処理の概要
このCSVパーサでは,以下の処理をファイルの最後まで繰り返し実行します。
- 読み込んだCSVデータから1行を1レコードとして取り出します。
- 1レコードをフィールドに分割してStringクラスインスタンスのリストを作ります。
- 1レコード分のフィールドのリストをレコード処理メソッド(「readColumns」)に渡します。
CSVファイルの文字コードは「Windows-31J/MS932」とします。これはExcelで開けるCSVの文字コードに合わせています。
■簡易CSVパーサプログラム
//------------------------------------------------------------------ /** * CSVファイルの読み込み。 * @param stream 入力ストリーム。FileInputStream,ByteArrayInputStreamなど。 */ public void read ( InputStream stream) { InputStreamReader reader = null; BufferedReader buff = null; try { reader = new InputStreamReader(stream, "MS932"); buff = new BufferedReader(reader); String record; String[] columns; int lineNum = 0; while ((record = buff.readLine()) != null) { |
次回は,この簡易パーサを拡張して「RFC4180」に対応したCSVパーサへの拡張を試みます。
CSVパーサを作る(その2) - RFC4180対応 前編→
※上記コードでは,整形のため全角スペースを使用している部分があります。
【著作権表記】上記コードを含む本ブログのプログラムコードは,私的利用可,商用利用可,改変しての利用可です。利用の際に作者に許諾を得る必要はありません。
■関連情報
CSVの仕様:RFC4180(日本語訳)(Wikipedia)
Microsoftコードページ932(Wikipedia)
WebObjects:CSVレスポンスの実装
■関連書籍をAmazonで検索:[Java]
●Java謎+落とし穴徹底解明
←この記事が役に立ったという方はクリックお願いします。
▼CSVパーサを作る[その1][その2][その3]
| 固定リンク
「プログラミング」カテゴリの記事
- シェルスクリプト:「.svn」ディレクトリを一括削除する(2015.03.23)
- JavaScript:excanvasを使ってWebページに画像を表示する(2012.05.07)
- C言語:TRUEとFALSEの値(2012.05.06)
- Java:CSVパーサを作る(その3) - RFC4180対応 後編(2008.06.13)
- Java:CSVパーサを作る(その2) - RFC4180対応 前編(2008.06.12)
「Java」カテゴリの記事
- Java:Reader/Writerにおけるclose()メソッド呼び出しの流儀(2015.06.29)
- Java:例外が起こったときに実行されるコードとされないコード(2015.03.31)
- Java:前回作成したコードの処理速度を比較する(2015.03.15)
- Java:数値を3桁ごとのカンマ区切りの文字列にする(2015.03.02)
- Java:全角の数値文字列を数値として受け付ける(2015.01.19)