| 17. 入力ストリーム |
| (1) ファイルから読み込むためのストリームを作る |
FileInputStream(File file) throws FileNotFoundException
FileInputStream(String fileName) throws FileNotFoundException
1つ目のコンストラクタでは読み込みたいファイル名を File オブジェクトで、2つ目のコンストラクタを使う場合には、ファイル名をそのまま指定します。
このようなコンストラクタを使って FileInputStream オブジェクトを生成した時点でファイルをオープンしたことになります(FileInputStream には open( ) というメソッドはありません)。
FileInputStream fis = new FileInputStream("filetest");
| (2) ファイルからの読み込み |
1. int read(byte[ ] b) throws IOException
入力ストリームから 1 バイトを読み込みます。
2. int read(byte[ ] b) throws IOException
入力ストリームから最大 b.length バイトをバイト配列に読み込みます。
3. int read(byte[ ] b, int start, int len) throws IOException
入力ストリームの start バイトめから最大 len バイトをバイト配列に読み込みます。
4. void close( ) throws IOException
FileInputStream を閉じます。
戻り値は int 型になっていますが、バイト単位に読み込まれることに注意してください。
下の例題は16章の FileOutputStream で書き込んだデータを読み込む例です。実行してみるときは、16章で作った filetest というファイルをカレントディレクトリにおいてください。
FileInTest.java
import java.io.*;
class FileInTest {
public static void main(String args[]) {
FileInputStream fis = null;
try {
fis = new FileInputStream("filetest");
} catch (Exception e) {
System.out.println("ファイルを開けません");
e.printStackTrace();
}
try {
while (true) {
int data = fis.read();
if (data==-1) break;
System.out.println(data);
}
} catch (Exception e) {
System.out.println("読み込みに失敗");
e.printStackTrace();
}
try {
fis.close();
} catch (Exception e) {
System.out.println("ストリームを閉じられません");
e.printStackTrace();
}
}
}
|
C:\java_test>java FileInTest 10 20 30 40 50 |
| (3) 入力フィルタストリーム |
FIleInputStream fis = new FileInputStream("filetest");
DataInputStream dis = new DataInputStream(fis);
DataInputStream のコンストラクタは以下の通りです。フィルタストリームなので、やはり既存の入力ストリームが必要になります。
DataInputStream(OutputStream out)
DataInputStream を使って基本データ型を読み込むメソッドのうち、よく使うものをあげておきます。(基本機能の3つの read( ) も使えます)。すべてのメソッドは IOException を投げる可能性があります。readXXX( ) を使う場合にはデータの終端にきたときに EOFException が発生することに注意してください。
1. boolean readBoolean( )
boolean 値を読み込みます。
2. char readChar( )
1文字読み込みます。
3. int readInt( )
int 型データを読み込みます。
4. long readLong( )
long 型データを読み込みます。
5. float readFloat( )
float 型データを読み込みます。
6. double readDouble( )
double 型 データを書き込みます。
7. String readUTF( )
文字列を読み込みます。
次の例題は16章の DataOutputStream で書き込んだデータを読み込むものです。
DataInTest.java (例外処理は簡素化しています)
import java.io.*;
class DataInTest {
public static void main(String args[]) {
try {
FileInputStream fis = new FileInputStream("filetest2");
DataInputStream dis = new DataInputStream(fis);
try {
while (true) {
System.out.println( dis.read() );
System.out.println( dis.readInt() );
System.out.println( dis.readUTF() );
}
} catch (EOFException e) {
System.out.println("データの終端です");
}
dis.close();
fis.close();
} catch (Exception e) {
System.out.println("例外発生");
e.printStackTrace();
}
}
}
|
C:\java_test>java DataInTest 10 100000 Java Java Java -1 データの終端です |