ファイルの入出力

ファイルはzipフォルダに納められています。
解凍ソフト(Aladdin Expander等)を使って解凍して下さい。

バイトファイル

バイトファイルからの入出力

バイトファイルからの入出力を行うには、バイトストリームクラス「FileInputStream」と「FileOutputStream」を使います。

@ストリームの確立

オブジェクトをインスタンス化する事で、ストリームを確立します。
此の時コンストラクタの引数には、読み込みたいファイル名、又は、書き出したいファイル名を指定します。
書き出しの場合で、既にファイルが有る場合には、既存のファイルに上書きするか、後に追加するかを選択出来ます。
指定が無い時は、上書きされます。

例: FileInputStream in = new FileInputStream("kyoro.gif"); //入力ストリーム
FileOutputStream out = new FileOutputStream("kyoro20060701a.gif"); //出力ストリーム(既存ファイルが有る時は上書き)
FileOutputStream out = new FileOutputStream("kyoro20060701a.gif", true); //出力ストリーム(既存ファイルの後に追加)

Aバイトデータの入出力

ファイルから1バイトのデータを読み込むには、readメソッドを使います。
此のメソッドを1回呼び出す毎に、次々と1バイトのデータがファイルから読み込まれます。
戻り値はint型で、ファイルの終わり(EOF:End Of File)に達した時は、「-1」を返します。
従って、readメソッドを繰り返し呼び出し、戻り値として「-1」が得られた時、呼び出しが終了する様にすれば、ファイル内のバイトデータを全部読み込めます。

例: int d = in.read();

ファイルへの1バイトデータの書き出しには、writeメソッドを使います。
此のメソッドを1回呼び出す毎に、実引数に指定された1バイトのデータが次々とファイルに書き込まれます。
実引数の型はint型です。

例: out.write(d);

Bストリームを閉じる

確立されているストリームを閉じるには、closeメソッドを呼び出します。

例: in.close();
out.close();

例外処理

データを入出力処理では、様々なエラーが発生する可能性が有ります。
例えば、読み込もうとしたファイルが存在しなかった、ファイルが壊れていて読み込めなかった、フロッピーディスクドライブのファイルを指定した時には、フロッピーディスクが入っていなかった、等です。
此等を例外と言います。
ドキュメントには、発生する可能性の有るエラークラスが書かれています。
プログラム中には、例外が発生した時の処理も書いておかなければなりません。
例外処理の書き方には、次の2通りが有ります。

@try〜catch

例外が発生する可能性の有る処理をtryブロックで囲みます。
tryブロックに続くcatchブロックは、例外クラスのオブジェクトを仮引数とするメソッド形式のブロックで、例外が発生した時に行う処理を書きます。
最後にfinallyブロックには、例外が発生してもしなくても行わなければならない処理を書きます。
通常、此処にはフラグ制御やファイルのクローズ等の後始末を書きます。

try{
        例外発生の可能性が有る文
}catch(例外クラス1 オブジェクト名){
        例外1発生時の処理
}catch(例外クラス2 オブジェクト名){
        例外2発生時の処理
}finally{
        後始末
}

Athrows

2つ目の方法は、例外が発生した時発生したメソッドで例外の処理を行うのではなく、其のメソッドの呼び出し元に委ねる方法です。
例外が発生する可能性の有る文を含むメソッド内では、try・catchブロックを書かずに、発生した例外を呼び出し元に投げるのです。
此の方法は、私達の日常の仕事の中で例えると、何か問題が発生した時自分で処理をせず、上司に報告して上司に対応して貰うと言う状況に似ていますね。
具体的な方法としては、例外が発生する可能性の有るメソッドの宣言時に、例外クラスをスローします。

型 メソッド名(仮引数)throws 例外クラス{
        メソッドの内容
}

此のメソッドの呼び出し元で、例外をキャッチした例外処理をする事になります。

実行時間外

例外には、上記の様に明記しなければならない例外の他に、

「0」で除算をしようとした
インスタンス化されていないオブジェクトにアクセスしようとした
配列のサイズを超えた要素を指定しようとした(添字の誤り)

等、実行時間外と呼ばれる例外が有ります。
此については、プログラム中に何の記述が無くても、例外がスローされます。

沢山のデータの読み込み

FileInputStreamクラス、FileOutputStreamクラスには、1度に沢山のバイトデータを読み込んだり、書き出したり出来るメソッドが用意されています。

例:
byte[] buf = new byte[1024]; //読み込み領域
int size = in.read(buf, 0, buf.length); //最大1024バイト迄読み込み
out.write(buf, 0, size); //読み込んだバイト数書き出す

コマンドライン

プログラム起動時に指定した文字列は、mainメソッドの仮引数「args」配列に以下の様に渡されます。

例: 「java CopyByteFileLine kyoro.gif kyoro20060702.gif」と指定した場合
args[0] "kyoro.gif"
args[1] "kyoro20060702.gif"

此の例ではmainメソッドが呼び出された時、コピー元のファイル名は「args[0]」に格納され、コピー先のファイル名は、「args[1]」に格納されているので、ストリームの確立は、

FileInputStream in = new FileInputStream(args[0]);
FileOutputStream out = new FileOutputStream(args[1]);

と書けます。
但し、配列「args」の要素数は、指定されたコマンドの数になります。
其の為、配列の各要素の文字列を使用する前に、引数が正しく2つ指定されたかどうか調べる必要が有ります。
例えば、

C:\javasrc>java CopyByteFile

の様にプログラムを起動した場合には、配列「args」は、要素数0個になり、「args[0]」や「args[1]」を指定しようとすると「配列の添字が大きすぎる」と言う例外が発生して終います。
2つの引数に同じ名前を指定すると、コピー元のファイルは、上書きされて終うので、其のチェックも入れておきましょう。

ソース ダウンロード
CopyByteFile.java CopyByteFile.zip
CopyByteFileA.java
CopyByteFileLine.java

テキストファイル

ファイルから文字を読み込むFileReaderクラス

FileReaderクラスは、テキストファイルから文字を読み込む為の簡易クラスです。

@入力ストリームの確立

FileReaderクラスのオブジェクトをインスタンス化する事で入力ストリームを確立します。
此の時コンストラクタの引数には、読み込みたいファイル名を指定します。

例: FileReader f = new FileReader("ファイル名");

A文字の入力

ファイルから文字を入力するには、readメソッドを使います。
此のメソッドは、ファイルから順に1文字ずつ読み込み、其の値をint型で返します。
ファイルの終わり(EOF)に達していて読み込めなかった場合には、「-1」が返ります。

ファイルに文字を書き出すFileWriterクラス

FileWriterクラスは、ファイルに文字を書き出す為の簡易クラスです。

@ストリームの確立

FileWriterクラスのオブジェクトをインスタンス化する事で、出力ストリームを確立します。
既に同名のファイルが存在する場合、記録されている情報を全て消去して新たなファイルを作るのか、記録されている情報の後に追加するのかを選択出来ます。

例: 消去して新しく作り直す場合
FileWriter out = new FileWriter("ファイル名", false);
FileWriter out = new FileWriter("ファイル名");
根本 要
柿沼清史
寺田正美
三谷泰弘
林 紀勝

スターダスト・レビュー(ワーナー・パイオニア)
後に追加する場合
FileWriter out = new FileWriter("ファイル名", true);
根本 要
柿沼清史
寺田正美
三谷泰弘
林 紀勝

スターダスト・レビュー(ワーナー・パイオニア)
根本 要
柿沼清史
寺田正美
三谷泰弘
林 紀勝

スターダスト・レビュー(ワーナー・パイオニア)

A文字の出力

ファイルに1文字書き込むには、writeメソッドを使います。
書き込む文字として、int型の実引数を与えます。

例: out.write(c);
ソース ダウンロード
ReadTextFromFile.java TextFile.zip
CopyTextFile.java

戻る