![]() ![]() ![]() ![]() |
入出力ストリーム |
このページでは、java.io のDataInputStream と DataOutputStream のクラスの使用方法を示す。 例として DataIOTest を起用し、表データ(Java 商品の送り状)の読み込みや書き込みを行う。 表データは列でフォーマットされていて、それぞれの列はタブによって区別される。 列には次のようにセールス価格、注文されたユニット数と項目の説明が入っている。
19.99 12 Java T-shirt 9.99 8 Java MugDataOutputStream は他のフィルタ出力ストリームのように、他の OutputStream に接続されていなければならない。 この場合、 invoice1.txt という名前のファイルに書き込むために設定された FileOutputStream に付加される。
DataOutputStream dos = new DataOutputStream( new FileOutputStream("invoice1.txt"));次に、DataIOTest は,DataOutputStream のデータ毎に用意した専用の writeXXX()メソッドを使用して、(プログラムの配列内に含まれている)送り状データをそのデータの型に合わせて作成する。
for (int i = 0; i < prices.length; i ++) { dos.writeDouble(prices[i]); dos.writeChar('¥t'); dos.writeInt(units[i]); dos.writeChar('¥t'); dos.writeChars(descs[i]); dos.writeChar('¥n'); } dos.close();この例では、処理が終了すると出力ストリームを閉じていることに注意する。
また、DataIOTest は,ファイル名を記述するだけで、そのファイル上に DataInputStream を開く。
DataInputStream dis = new DataInputStream( new FileInputStream("invoice1.txt"));DataInputStream も同様に他の InputStream に接続されなければならない。 この例では、 invoice1.txt ファイルを読み込むために設定された FileInputStream に接続される。 DataIOTest は DataInputStream のデータ毎に用意した専用のreadXXX() メソッドを使用して、データを読み返す。
try { while (true) { price = dis.readDouble(); dis.readChar(); // tabを捨てる unit = dis.readInt(); dis.readChar(); // tabを捨てる desc = dis.readLine(); System.out.println("You've ordered " + unit + " units of " + desc + " at $" + price); total = total + unit * price; } } catch (EOFException e) { } System.out.println("For a TOTAL of: $" + total); dis.close();すべてのデータが読み取られると、DataIOTest は注文と合計金額をまとめた文を表示してストリームを閉じる。
DataIOTest が DataInputStream からデータを読むために使用するループに注意すること。 通常、読み取り特には,次のようなループが使用される。
while ((input = dis.readLine()) != null) { . . . }readLine() メソッドは値、 null を返し、ファイルの終りに達したことを表す。 ファイルの終わりを示すために返される値はストリームから読み込まれた正当な値と区別ができないので、DataInputStreamの readXXX() メソッドの多くが、ファイルの終りに達したことを判断できない。 たとえば、ファイルの終わりを示すために - 1 を使用したいと仮定してほしい。 - 1 は readDouble()、readInt()、あるいは数を読む他の read メソッドを使用して、入力ストリームから読み込まれる正当な値なので、ファイルの終りを知ることはできない。 それで DataInputStream の readXXX() メソッドは、その代わりに EOFException をあげる。 EOFException が 発生するとwhile(true)は終了する。
DataIOTest プログラムを実行すると、次のような出力になる。
You've ordered 12 units of Java T-shirt at $19.99 You've ordered 8 units of Java Mug at $9.99 You've ordered 13 units of Duke Juggling Dolls at $15.99 You've ordered 29 units of Java Pin at $3.99 You've ordered 50 units of Java Key Chain at $4.99 For a TOTAL of: $892.88参照
![]() ![]() ![]() ![]() |
入出力ストリーム |