テキストファイルの入出力を簡単にしよう(1)

テキストファイルの入出力は、たまに必要になります。
どうということもないのですが、文字コードの指定や追記モードの設定などまでやると、APIを参照したりしてそれなりに面倒です。
そこで、TextReader、TextWriterというオールインワンの簡単に使えるツールを作りました。
今回は、TextReaderについて紹介します。(TextWriterは次回)

ソースコードはこちらからダウンロードできます。
TextReader.java+APIドキュメント

TextReaderの使い方

APIは後でまとめて示しますが、簡単に使い方を紹介します。
オーソドックスな使い方は1行ずつ読む方法ですが、次のようにします。
try-catchは不要です。close()も書けますが、書かなくてもOKです。

 TextReader in = new TextReader("myfile.txt");
 String line;
 while((line=in.readLine())!=null){
     System.out.println(line);
 }

次のようにファイルのすべての行をリストで受け取ることもできます。
こちらの方が便利ですね。

 TextReader in = new TextReader("myfile.txt");
 List<String> ls = in.readAllLines();
 for(String line : ls){
     System.out.println(line);
 }

また、CSVファイルを読む時は、コンマ位置で分割して配列を返すことができます。CSVファイルのコンマの前後の空白文字(半角空白、タブなど)や項目を囲う2重引用符は自動的に取り除かれます。

 TextReader in = new TextReader("myfile.csv");
 String[] csv ;
 while((csv=in.readCsv())!=null){ // 1行読み、Stringの配列で受け取る
     for(String item : csv){
         System.out.print(item+" "); // CSVの内容を表示する
     }
     System.out.println(); // 改行
 }

CSVファイルmyfile.csvと、それをこのプログラムで処理した結果は次のようです。


[myfile.csv]

100, 田中宏, 71, 68, 77
101, 森下はな, 75, 92, 81
102, 上村絵里, 78, 85, 95
103, 鈴木一郎, 65, 55, 72
104, 橋本正, 68, 72, 66

出力結果

100 田中宏 71 68 77
101 森下はな 75 92 81
102 上村絵里 78 85 95
103 鈴木一郎 65 55 72
104 橋本正 68 72 66

コンストラクタ

ファイル名を指定する方法だけでなく、New IOのPathオブジェクトでも指定できます。また、ファイルの文字コードを指定して生成できます。

ファイル名で指定

 TextReader in = new TextReader("c:/data/myfile.txt");

文字コードも指定する

TextReader in = new TextReader("myfile.txt", "Shift_JIS");

Pathで指定

 Path path = Paths.get("c:", "data", "myfile.txt");
 TextReader in = new TextReader(path, "Shift_JIS");

デフォルトの文字コード

デフォルトの文字コードはUTF-8になっているので注意してください。
文字コードが違うと、読み出しエラーが起こります。

デフォルトの文字コードを変更してしましたい場合は次のようにしてください。

TextReader.setDefaultCharset("Shift_JIS"); // 設定

デフォルトの文字コードを確認したい時は、次のように文字列で取得できます。

String chaset = TextReader.getDefaultCharset(); // 文字列で取得

API

APIは次の通りです。
TextReaderは、生成時にテキストファイルをすべて読み込んでいるので、ヒープメモリを消費します。テキストファイルは、総じてサイズが小さいのが普通ですから、実用上は問題ありませんが、巨大なテキストファイルを扱う時は、使わない方がいいでしょう。
なお、本文には書きませんでしが、size()、sort()、rewind()などの機能もあります。
A0200

読者になる

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

%d人のブロガーが「いいね」をつけました。