サンプルプログラム DisplayFile.java は、 ファイルである sample.txt を入力ストリームとして扱い、 そこから 1行ずつ読み込み画面に表示するものでした。
このプログラムの入力ストリームを用意する部分を変更すれば、ファイルではなく、 キーボードやWebサーバからのデータを扱うことができるようになります。
import java.io.*;
class DisplayFile {
public static void main(String args[]) {
BufferedReader in = null;
try {
in = new BufferedReader(new FileReader("sample.txt"));
}
catch (IOException e) {
System.err.println("File cannot be opened.");
System.exit(1); // ←終了コード 1 でプログラムを終了するメソッド
}
try {
String str;
str = in.readLine();
while (str != null) {
System.out.println(str);
str = in.readLine();
}
}
catch (IOException e) {
System.err.println("An error was occured while reading.");
}
try {
in.close();
}
catch (IOException e) {
System.err.println("An error was occured while closing.");
}
}
}
このプログラムの入力ストリームを用意する部分を変更すれば、ファイルではなく、 キーボードやWebサーバからのデータを扱うことができるようになります。
このプログラムでは、ファイルから入力ストリームを用意し、 それを読み込むリーダーのオブジェクトを生成するところまで、 1行で書いてあります。
in = new BufferedReader(new FileReader("sample.txt"));
ファイルから入力ストリームを用意するところが表に現れていませんが、 これは FileReader のコンストラクタが内部でそれをやってくれているからです。 FileReader を用いるのは簡略化したやり方で、 本来は次のような手順で入力ストリームとそれを読み込むリーダーを生成します。
// まずファイル名を与えてFileInputStreamのインスタンスisを生成 InputStream is = new FileInputStream("sample.txt"); // 次にisを読み込むInputStreamReaderのインスタンスisrを生成 InputStreamReader isr = new InputStreamReader(is, "UTF-8"); // さらにisrをラップするBufferedReaderのインスタンスrを生成 in = new BufferedReader(isr);
3行になりましたが、ファイルから入力ストリーム(InputStream)を用意する1行目を変更すれば、ファイル以外のものも読み込めるようになります。
Webサーバから送られてくるデータを入力ストリームにするには、 次のように記述します。
import java.net.*; // URL, URLConnection クラスの属するパッケージ ... // URLオブジェクトを生成 URL url = new URL(args[0]); // URLオブジェクトから、接続にいくURLConnectionオブジェクトを取得 URLConnection connection = url.openConnection(); // 接続 connection.connect(); // サーバからやってくるデータをInputStreamとして取得 InputStream is = connection.getInputStream();
プログラム全体としては次のようになります。
import java.io.*; import java.net.*; // URL, URLConnection クラスの属するパッケージ class DisplayFile { public static void main(String args[]) { BufferedReader in = null; try { // URLオブジェクトを生成 URL url = new URL(args[0]); // URLオブジェクトから、接続にいくURLConnectionオブジェクトを取得 URLConnection connection = url.openConnection(); // 接続 connection.connect(); // サーバからやってくるデータをInputStreamとして取得 InputStream is = connection.getInputStream(); // 次にisを読み込むInputStreamReaderのインスタンスisrを生成 InputStreamReader isr = new InputStreamReader(is, "UTF-8"); // さらにisrをラップするBufferedReaderのインスタンスrを生成 in = new BufferedReader(isr); } catch (IOException e) { System.err.println("File cannot be opened."); System.exit(1); // ←終了コード 1 でプログラムを終了するメソッド } try { String str; str = in.readLine(); while (str != null) { System.out.println(str); str = in.readLine(); } } catch (IOException e) { System.err.println("An error was occured while reading."); } try { in.close(); } catch (IOException e) { System.err.println("An error was occured while closing."); } } }