libro
www.tuyano.com
初心者のためのJava SEプログラミング入門

ファイルアクセス (3/6)

作成:2010-01-14 19:01
更新:2010-01-14 19:01

■FileWriterによるテキスト書き出し

では、いよいよストリームについて説明していきましょう。まずは、メソッドの並び順は逆になってしまいますが、書き込みを行なう「writeTextToFile」メソッドから見ていきましょう。(下リスト参照)

このメソッドでは、最初に「try」なんてものがあります。これは「エラー処理のための構文」と考えて下さい。――ファイル処理では、実行した命令が必ずしも期待通りの結果を出すとは限りません。ファイルを開こうとしたらファイルがなかった、データを読み込んだらデータがなかった、ファイルが破損していてうまく開けなかった…なんてことはいかにもありそうなことです。そこで、ファイル関係を扱う場合は、「エラーが起きたらこうして」ということを構文で指定しておくのです。

try {

    ……ここにエラーが起きるかも知れないという処理を書く……

} catch(Exception e) {

    ……ここに、エラーが起きた時にどうするかを書く……

}

 これが、「try構文」と呼ばれるエラー処理用構文の基本形です。tryの後にある{}部分に実行する処理を書いておくわけですね。で、そこでエラーが起きたらcatch以降の{}にジャンプするわけです。catchのパラメータにある (Exception e) ってのは、まあ「そう書くのだ」と思ってしまって下さい。実をいえば、これはもっと細かにいろいろ書き方があったりするのだけど、とりあえず「こう書けばエラー処理はできる」と覚えてしまって、今のところは問題ありません。

○FileDialogでファイルを選択する○
さて、try内で行なっていることに進みます。まず、FileDialogを作って、保存するファイル名を入力してもらってますね。FileDialogは、インスタンスを作った後、「setVisible(true)」というので画面に表示をします。setVisibleってのは、部品の表示/非表示を設定するものです。

FileDialogは、一度画面に表示されると、ボタンを押してダイアログが消えるまで、ずっとプログラムの処理は停止したままになります。つまり、setVisible(true)とすると、その次にある行は、ダイアログが消えてから実行されるのです。

で、ダイアログが消えると、このFileDialogインスタンスには入力したファイル名と選択されたディレクトリなどの情報がセットされます。これらをメソッドで取り出してやれば、どの場所になんというファイル名で保存しようとしたかがわかるってわけです。

String fname = fd.getDirectory() + fd.getFile();

それを行なっているのがこの部分です。「getDirectory()」が選択された場所のパスを、「getFile()が入力されたファイル名を、それぞれStringで返します。ですから、この2つを1まとめにすれば、保存するファイルのフルパスが得られるというわけです。もしキャンセルをした場合には、これらの値はnullになります。ここではキャンセル時の処理は省略していますので、余力があればこれらがnullでないときだけ処理を実行するように改良してみるとよいでしょう。

○FileWriterの処理○
さて、いよいよ、今度こそ本当に、ストリームの出番です。テキストファイルの書き出しを行なうには、「FileWriter」というストリームを使います。これはライターというものの一種で、文字どおりファイルに保存する時の基本となるクラスです。このFileWriterは、パラメータに、保存するファイルを示すStringを指定します。単にファイル名だけならカレントディレクトリ(要するにクラスファイルがある場所)にあるその名前のファイルに保存しますし、他の場所に保存したければフルパスで指定します。

ファイルへの書き込みは「write()」というメソッドを実行します。これは、書き込むテキストをパラメータに指定するだけです。意外と簡単ですね。

そして書き込みが終わったら、「close()」というメソッドでストリームを閉じてやります。これを忘れると、ファイルが「使用中」の状態のままとなりますから注意して下さい。

○テキストファイル保存の手順○
というわけで、整理するとファイルへの書き込みは、だいたい以下のようになります。わかってしまえば、意外に簡単そうでしょう?

1.new FileWriter(ファイル名) でFileWriterインスタンスを作る。
2.《FileWriter》 .write(テキスト) でテキストを書き込む。
3. 《FileWriter》 .close() でストリームを閉じる。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※書き出しのメソッド
	void writeTextToFile() {
		try {
			FileDialog fd = new FileDialog(this,"Select Text File.",FileDialog.SAVE);
			fd.setVisible(true);
			String fname = fd.getDirectory() + fd.getFile();
			FileWriter fw = new FileWriter(fname);
			fw.write(ta.getText());
			fw.close();
		} catch(Exception e) {
			System.out.println(e);
		}
	}

※関連コンテンツ

「初心者のためのJava SEプログラミング入門」に戻る