ゼロから学ぶJavaの入出力:ストリームを理解する

文:Jeff Hanson(TechRepublic)  翻訳校正:原井彰弘
2007-12-17 14:00:00
  • このエントリーをはてなブックマークに追加

リストB

char[] buffer = new char[256];
while ((fileReader.read(buffer)) >= 0)
{
System.out.print(new String(buffer));
}

 入力ストリームを閉じて、ストリームによって使用されていたすべてのシステムリソースを解放するには、closeメソッドを以下のように用いる。

fileReader.close();

データの書き込み

 入力ストリームと同様に、普通は出力ストリームもデータソースオブジェクトから取り出したり、書き込み関連のストリームオブジェクトを作成した際に、自動的に開かれる。たとえば、ファイルの出力ストリームを開くには、ファイルの名前をjava.io.FileWriterクラスのコンストラクタに渡すだけでよい。例を次に示す。

java.io.FileWriter fileWriter = new java.io.FileWriter("/home/me/out.txt");

 文字を出力ストリームに書き込むには、int型のパラメータを1つ受け取るwriteメソッドを利用する。ここで、パラメータには書き込む文字を指定する。

int aChar = (int)'X';

fileWriter.write(aChar);

 char型の配列内の、指定したオフセット位置から始まる指定したバイト数を出力ストリームに書き込むには、3つの引数を受け取るwriteメソッドを利用する。引数は順番にchar[]型、オフセットを表すint型、そして長さを表すint型となっている。以下に例を示す。

fileWriter.write(buffer, 0, byteCount);

 出力ストリームを閉じて、ストリームによって使用されていたすべてのシステムリソースを解放するには、closeメソッドを以下のように用いる。

fileWriter.close();

 また、バッファに保持されているデータをすべて強制的に出力ストリームへ出力するには、以下のようにflushメソッドを用いる。

fileWriter.flush();

入力ストリームと出力ストリームを組み合わせる

 ここまでで学んだことを利用して、ファイルからデータを読み取って同時に別のファイルに書き込むプログラムを書くことができる。リストCに実際のプログラムを示す。

リストC

try
{
java.io.FileReader fileReader =
new java.io.FileReader("/home/me/temp.txt");
java.io.FileWriter fileWriter =
new java.io.FileWriter("/home/me/out.txt");
char[] buffer = new char[256];
int byteCount = 0;
while ((byteCount = fileReader.read(buffer)) >= 0)
{
fileWriter.write(buffer, 0, byteCount);
}
fileWriter.flush();
fileWriter.close();
fileReader.close();
}
catch(Exception e)
{
System.out.println(e.toString());
}

まとめ

 Javaの入出力機能を利用すると、標準化されたシンプルなAPIを用いて、さまざまなデータソースからの文字やバイトデータを読み書きできるようになる。あるデータソースを利用して開発を行った際に得られたストリームの経験は、ほかのJavaのデータソースを扱う際にも活かすことが可能なのである。

 次の記事では、Javaプラットフォームにおけるネットワークとリモート通信のフレームワークについて調べる。Javaのストリームに関する議論をネットワーク環境にまで広げ、ファイルのようなローカルのデータソースと同じ方法で、リモートのデータソースを読み書きできることをお見せしよう。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]