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 データの終端です |