RandomAccessFile

Revised: Mar./16th/2002

RandomAccessFile は本節で扱ったほかのストリームとの互換性はありません。他のストリームは汎用の I/O を意識してデザインされていますが、 RandomAccessFile はファイルの特性を利用したものになっています。

但し、インタフェース DataInput/DataOutput を実装しており、基本データ型を扱うフィルタ機能が利用できます。 FileInputStream/FileOutputStream と似た使い方が出来ます。

RandomAccessFile クラス

継承階層:

java.lang.Object
  |
  +--java.io.RandomAccessFile

インタフェース DataInput/DataOutput を実装。

コンストラクタ:

RandomAccessFile(File file, String mode)
RandomAccessFile(String name, String mode)

コンストラクタ引数には、ファイルを指定するパスを抽象パス(File オブジェクト)か文字列で与えます。また、読み書きのモードを文字列で与えます。モードは r/rw のいずれかしか指定できません。読み取り専用 (read only) でオープンする場合は r 、読み書き可能 (read/write) でオープンする場合は rw です。

また、このコンストラクタは実行時の状況に応じて例外を発生します。

コンストラクタの例外:

たとえば、読み取り専用 r でオープンするときにファイルが存在しなければ FileNotFoundException がスローされます。因みに、読み書き可能 rw の場合にファイルが存在しなければサイズ0のファイルが作成されます。この例外はかならずキャッチする必要がある例外ですので、インスタンス化する場合は、 try-catch ブロックで括るか、インスタンス化しているメソッドからさらに上位の制御へ処理を委譲するようにメソッドの throws リスト に加える必要があります。

メソッド

DataInput/DataOutput インタフェースで宣言されたメソッドの実装以外では、次のメソッドが主に使われます:

public longgetFilePointer() ファイルの現在のバイト位置を返します。
public intskipBytes(int n) n バイトの入力をスキップして、スキップしたバイトを破棄しようとします。
public voidseek(long pos) このファイルの先頭を始点として、ファイルポインタのバイト位置を設定します。
public longlength() このファイルのバイトサイズを返します。
public voidclose() このランダムアクセスファイルストリームを終了し、このストリームに関連するすべてのシステムリソースを解放します。

RandomAccessFile はファイル先頭からのバイト位置へのアクセスしか実装していませんが、ここに挙げたメソッドを利用することで、簡単に現在位置からのバイト位置ファイル末尾からのバイト位置を実装するクラスを作ることが出来ます。



Copyright © 2002 SUGAI, Manabu. All Rights Reserved.
SEO [PR] !uO z[y[WJ Cu