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

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

作成:2010-01-14 18:57
更新:2010-01-14 18:57

■ストリーム以外の新しい知識

テキストファイルの読み書きには、いくつか覚えておかないといけない知識があります。まず、最初のimport文を見て下さい。「import java.io.*;」というのが追加されていますね? これは、I/O関係(要するにデータのやり取り)の機能がまとめられたライブラリです。ストリーム関係もここにあるので、ファイルを扱う時はこれをimportするのを忘れないようにしましょう。

今回は、ストリーム以外にもいろいろと細かい新知識が登場します。それらについてまず説明しておきましょう。――まず、このTest10クラスの仕組みからです。今まで、ボタンをクリックして処理をする時は、ActionListenerのクラスを作って組み込んでいましたね。今回はちょっと面白いやり方をしてます。それは「Test10自身をActionListenerにしてしまう」というものです。

 リスナークラスは、imeplementsでインターフェイスを組み込めば作れました。で、implementsはextendsと一緒に使うことができました。だったら、わざわざ別にクラスを作らず、このTest10自身にimplements ActionListenerしたっていいじゃないですか? 要するに、implementsしておいて、actionPerformedメソッドが用意してあればいいわけですよね?

全くその通りで、実は別にクラスを作らなくても、この例のように1つのクラスでリスナーを兼ねてしまうことも可能なんですね。「じゃあなんで最初からそうしなかったんだ!」と思うかも知れませんが、やっぱり2つを分けてそれぞれの役割を理解して、その上で「2つを1つにまとめることもできます」ということを覚えたほうがよいと思ったのでそうしました。

このクラス自身をリスナーにしているってことは、自分自身をリスナーとして部品に組み込むことになります。コンストラクタ部分を見てみると、「b1.addActionListener(this);」なんて具合に書いてありますね? thisをリスナーとして組み込んでいることがわかるでしょう。

○actionPerformedの働き○
さて、次に進みましょう。actionPerformedではどんなことをやってるでしょうか。――見てみると、getSourceを使ってどっちのボタンをクリックしたかチェックして、それから「this.readTextFromFile();」とか「this.writeTextToFile();」ってものを呼び出してます。これって、どういうものでしょう?

実は、これは、このクラス自身に自作して組み込んだメソッドなんですね。今まで、メソッドといえば「クラスに用意されているもの」という感じがしてましたが、もちろん自分で新しいメソッドを組み込むことだってできるわけです。今回はその例として、ファイルの読み込みと書き出しをそれぞれ独立したメソッドにして、actionPerformedでは単にそれらを呼び出すだけにしておきました。

メソッドを作成すると、機能を1まとめにして整理することができます。例えば、actionPerformedの中にファイルの読み込みと書き出しと全部がずら~~って書いてあるより、それぞれがメソッドとして用意してあったほうがわかりやすいでしょう? 後で「読み込みの処理を少し変えよう」と思ったらそのメソッドだけを書き換えればいいのですから。長いactionPerformedから「どこが読み込みの部分だったっけな?」などと調べて修正するよりはるかにわかりやすいですね。

○ファイルダイアログ○
さて、ではストリームに…と進む前に、もう1つ覚えておくことがありました。それは「ファイルダイアログ」です。今回はファイルの読み書きをしますから、やっぱりファイル選択のダイアログを使って処理をしたいですね。

ファイルダイアログは、AWTに「FileDialog」っていうクラスとして用意されています。これは、単純にパラメータも何もなしでnewすることもできるんですが、普通はこんな感じで使う方が多いでしょう。

new FileDialog(親フレーム, タイトルのテキスト, モード)

「親フレーム」っていうのは、このダイアログがどのFrame(というかウィンドウ)から呼び出されたものかを指定します。こうしたダイアログというのは、あるウィンドウから一時的に呼び出されるという感じのものですから、「属するもの」を指定する必要があるのですね。また、モードというのは「オープンダイアログか、セーブダイアログか」を指定するものです。これはFileDialogにある「LOAD」「SAVE」という定数を使って指定します。FileDialog.LOADなんて感じで書けばいいわけですね。

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

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

※関連コンテンツ

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