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
です。
また、このコンストラクタは実行時の状況に応じて例外を発生します。
IllegalArgumentException
- mode 引数が "r
" または "rw
" でない場合FileNotFoundException
- ファイルは存在するが通常のファイルではなくディレクトリである場合や、ほかの理由でファイルを開くこと、あるいは作成することができない場合SecurityException
- セキュリティマネージャが存在する場合に、セキュリティマネージャの checkRead()
メソッドがファイルへの読み込みアクセスを拒否した場合、あるいはモードが "rw
" でセキュリティマネージャの checkWrite()
メソッドがファイルへの書き込みアクセスを拒否した場合たとえば、読み取り専用 r
でオープンするときにファイルが存在しなければ FileNotFoundException
がスローされます。因みに、読み書き可能 rw
の場合にファイルが存在しなければサイズ0のファイルが作成されます。この例外はかならずキャッチする必要がある例外ですので、インスタンス化する場合は、 try-catch ブロックで括るか、インスタンス化しているメソッドからさらに上位の制御へ処理を委譲するようにメソッドの throws リスト に加える必要があります。
DataInput
/DataOutput
インタフェースで宣言されたメソッドの実装以外では、次のメソッドが主に使われます:
public long | getFilePointer() |
ファイルの現在のバイト位置を返します。 |
---|---|---|
public int | skipBytes(int n) |
n バイトの入力をスキップして、スキップしたバイトを破棄しようとします。 |
public void | seek(long pos) |
このファイルの先頭を始点として、ファイルポインタのバイト位置を設定します。 |
public long | length() |
このファイルのバイトサイズを返します。 |
public void | close() |
このランダムアクセスファイルストリームを終了し、このストリームに関連するすべてのシステムリソースを解放します。 |
RandomAccessFile
はファイル先頭からのバイト位置へのアクセスしか実装していませんが、ここに挙げたメソッドを利用することで、簡単に現在位置からのバイト位置、ファイル末尾からのバイト位置を実装するクラスを作ることが出来ます。