ウインドウ内にテキストを書いてウインドウを閉じると、終了時に自動的に書いたテキストをファイルに保存する。 |
テキストファイル保存の流れ
ここでは、TextAreaを1つだけFrameに配置してあります。そして、ウインドウを閉じるときの処理を行うWindowMyAdapterに、ウインドウを閉じるときのイベント処理をするwindowClosingを用意し、ここで「saveToFile」というメソッドを実行してからプログラムを終了するようにしてあります。このsaveToFileというメソッドが、テキストファイルに保存するための処理を行う部分になります。
import java.io.*;
最初に、ファイルアクセスに関するクラスは、java.ioパッケージにまとめられています。このため、最初にこのパッケージ内のクラスをimportしておく必要があります。これは忘れないようにしましょう。
では、saveToFileメソッドの処理を見てみましょう。まず、保存するファイル名と、利用するストリームを保管しておく変数を用意しておきます。
String fname = "text_data.txt";
FileWriter writer = null;
BufferedWriter bwriter = null;
ストリームを利用したファイルアクセスは、例外を発生させる場合があるため、try内で行います。そこで、まず最初にこれらを入れておく変数などを用意しておきます。そして、try内で実際の処理を行います。
try {
writer = new FileWriter(fname);
bwriter = new BufferedWriter(writer);
まず、new FileWriter(fname)としてFileWriterインスタンスを作成します。引数にファイル名を指定すると、そのファイルに保存するためのFileWriterインスタンスが作成されるのです。そして、このFileWriterを引数に指定して、new BufferedWriterを行います。これで、引数に指定したFileWriterにバッファ機能を付加したBufferedWriterインスタンスが用意できます。このBufferedWriterにあるメソッドを呼び出してテキストを保存すれば、引数に指定したFileWriterを通じて、fnameのファイルに保存がされる、という仕掛けになっています。
bwriter.write(area.getText());
テキストの保存は、BufferedWriterの「write」メソッドを使います。これは、引数に指定したStringをストリームに出力するものです。これで、テキストがファイルに書き出されるのですね。
} finally {
try {
bwriter.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
最後に、finally節で、BufferedWriterの「close」を呼び出してストリームを開放します。ただし、このcloseも例外を発生させる場合があるので、これもtryで囲んで実行してやります。
これでテキストファイルの保存は完了です。慣れない間は、意味など深く考えず「この通りにやればテキストファイルに保存できるんだ」とだけ理解しておけばいいでしょう。何度も使っているうちに、2つのオブジェクトの働きがなんとなくわかってくるんじゃないでしょうか。