所有类


java.io
类 RandomAccessFile

java.lang.Object
  继承者 java.io.RandomAccessFile
所有已实现的接口:
Closeable, DataInput, DataOutput

public class RandomAccessFile
   
   
   
   
   
extends Object
implements DataOutput, DataInput, Closeable

此类的实例支持对随机存取文件的读取和写入。随机存取文件的行为类似存储在文件系统中的一个大型字节数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机存取文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。

通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException(是一种 IOException)。如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException,而不是 EOFException。需要特别指出的是,如果流已被关闭,则可能抛出 IOException

从以下版本开始:
JDK1.0

构造方法摘要
RandomAccessFile(File file, String mode)
          创建从中读取和向其中写入(可选)的随机存取文件流,该文件由 File 参数指定。
RandomAccessFile(String name, String mode)
          创建从中读取和向其中写入(可选)的随机存取文件流,该文件具有指定名称。
 
方法摘要
 voidclose()
          关闭此随机存取文件流并释放与该流关联的所有系统资源。
 FileChannelgetChannel()
          返回与此文件关联的惟一 FileChannel 对象。
 FileDescriptorgetFD()
          返回与此流关联的不透明文件描述符对象。
 longgetFilePointer()
          返回此文件中的当前偏移量。
 longlength()
          返回此文件的长度。
 intread()
          从此文件中读取一个数据字节。
 intread(byte[] b)
          将最多 b.length 个数据字节从此文件读入字节数组。
 intread(byte[] b, int off, int len)
          将最多 len 个数据字节从此文件读入字节数组。
 booleanreadBoolean()
          从此文件读取一个 boolean
 bytereadByte()
          从此文件读取一个有符号的八位值。
 charreadChar()
          从此文件读取一个 Unicode 字符。
 doublereadDouble()
          从此文件读取一个 double
 floatreadFloat()
          从此文件读取一个 float
 voidreadFully(byte[] b)
          将 b.length 个字节从此文件读入字节数组,并从当前文件指针开始。
 voidreadFully(byte[] b, int off, int len)
          将正好 len 个字节从此文件读入字节数组,并从当前文件指针开始。
 intreadInt()
          从此文件读取一个有符号的 32 位整数。
 StringreadLine()
          从此文件读取文本的下一行。
 longreadLong()
          从此文件读取一个有符号的 64 位整数。
 shortreadShort()
          从此文件读取一个有符号的 16 位数。
 intreadUnsignedByte()
          从此文件读取一个无符号的八位数。
 intreadUnsignedShort()
          从此文件读取一个无符号的 16 位数。
 StringreadUTF()
          从此文件读取一个字符串。
 voidseek(long pos)
          设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。
 voidsetLength(long newLength)
          设置此文件的长度。
 intskipBytes(int n)
          尝试跳过输入的 n 个字节以丢弃跳过的字节。
 voidwrite(byte[] b)
          将 b.length 个字节从指定字节数组写入到此文件,并从当前文件指针开始。
 voidwrite(byte[] b, int off, int len)
          将 len 个字节从指定字节数组写入到此文件,并从偏移量 off 处开始。
 voidwrite(int b)
          向此文件写入指定的字节。
 voidwriteBoolean(boolean v)
          按单字节值将 boolean 写入该文件。
 voidwriteByte(int v)
          按单字节值将 byte 写入该文件。
 voidwriteBytes(String s)
          按字节序列将该字符串写入该文件。
 voidwriteChar(int v)
          按双字节值将 char 写入该文件,先写高字节。
 voidwriteChars(String s)
          按字符序列将一个字符串写入该文件。
 voidwriteDouble(double v)
          使用 Double 类中的 doubleToLongBits 方法将双精度参数转换为一个 long,然后按八字节数量将该 long 值写入该文件,先定高字节。
 voidwriteFloat(float v)
          使用 Float 类中的 floatToIntBits 方法将浮点参数转换为一个 int,然后按四字节数量将该 int 值写入该文件,先写高字节。
 voidwriteInt(int v)
          按四个字节将 int 写入该文件,先写高字节。
 voidwriteLong(long v)
          按八个字节将 long 写入该文件,先写高字节。
 voidwriteShort(int v)
          按两个字节将 short 写入该文件,先写高字节。
 voidwriteUTF(String str)
          使用 modified UTF-8 编码以与机器无关的方式将一个字符串写入该文件。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

RandomAccessFile

public RandomAccessFile(String name,
                        String mode)
                 throws FileNotFoundException
创建从中读取和向其中写入(可选)的随机存取文件流,该文件具有指定名称。将创建一个新的 FileDescriptor 对象来表示到文件的连接。

mode 参数指定用以打开文件的访问模式。允许的值及其含意如 RandomAccessFile(File,String) 构造方法所指定的那样。

如果存在安全管理器,则使用 name 作为其参数调用其 checkRead 方法,以查看是否允许对该文件进行读取访问。如果该模式允许写入,那么还使用 name 作为安全管理器的参数来调用其 checkWrite 方法,以查看是否允许对该文件进行写入访问。

参数:
name - 取决于系统的文件名
mode - 此存取 mode
抛出:
IllegalArgumentException - 如果此模式参数与 "r""rw""rws""rwd" 的其中一个不相等
FileNotFoundException - 如果该模式为 "r",但给定的字符串表示一个现有的常规文件,或者该模式以 "rw" 开头,但给定的字符串不表示一个现有的可写常规文件,而且无法创建具有该名称的新常规文件,或者在打开或创建该文件时发生一些其他错误
SecurityException - 如果存在安全管理器,并且其 checkRead 方法拒绝对该文件的读取访问,或者该模式为 "rw",并且该安全管理器的 checkWrite 方法拒绝对该文件的写入访问
另请参见:
SecurityException, SecurityManager.checkRead(java.lang.String), SecurityManager.checkWrite(java.lang.String)

RandomAccessFile

public RandomAccessFile(File file,
                        String mode)
                 throws FileNotFoundException
创建从中读取和向其中写入(可选)的随机存取文件流,该文件由 File 参数指定。将创建一个新的 FileDescriptor 对象来表示此文件的连接。

mode 参数指定用以打开文件的访问模式。允许的值及其含意为:

含意

"r"以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException
"rw"打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。
"rws"打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到基础存储设备。
"rwd"  打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到基础存储设备。
"rws""rwd" 模式的工作方式极其类似
FileChannel 类的 force(boolean) 方法,分别传递 truefalse 参数,除非它们始终应用于每个 I/O 操作,并因此通常更为高效。如果该文件位于本地存储设备上,那么当返回此类的一个方法的调用时,可以保证由该调用对此文件所做的所有更改均被写入该设备。这对确保在系统崩溃时不会丢失重要信息特别有用。如果该文件不在本地设备上,则无法提供这样的保证。

"rwd" 模式可用于减少执行的 I/O 操作数量。使用 "rwd" 仅要求更新要写入存储的文件的内容;使用 "rws" 要求更新要写入的文件内容及其元数据,这通常要求至少一个以上的低级别 I/O 操作。

如果存在安全管理器,则使用 file 参数的路径名作为其参数调用它的 checkRead 方法,以查看是否允许对该文件进行读取访问。如果该模式允许写入,那么还使用该路径参数调用该安全管理器的 checkWrite 方法,以查看是否允许对该文件进行写入访问。

参数:
file - 该文件对象
mode - 访问模式,如所述
抛出:
IllegalArgumentException - 如果此模式参数与 "r""rw""rws""rwd" 的其中一个不相等
FileNotFoundException - 如果该模式为 "r",但给定的文件对象不表示一个现有的常规文件,或者该模式以 "rw" 开头,但给定的文件对象不表示一个现有的可写常规文件,而且无法创建具有该名称的新常规文件,或者在打开或创建该文件时发生一些其他错误
SecurityException - 如果存在安全管理器,并且其 checkRead 方法拒绝对该文件的读取访问,或者该模式为 "rw",并且该安全管理器的 checkWrite 方法拒绝对该文件的写入访问
另请参见:
SecurityManager.checkRead(java.lang.String), SecurityManager.checkWrite(java.lang.String), FileChannel.force(boolean)
方法详细信息

getFD

public final FileDescriptor getFD()
                           throws IOException
返回与此流关联的不透明文件描述符对象。

返回:
与此流关联的不透明文件描述符对象。
抛出:
IOException - 如果发生 I/O 错误。
另请参见:
FileDescriptor

getChannel

public final FileChannel getChannel()
返回与此文件关联的惟一 FileChannel 对象。

返回通道的 java.nio.channels.FileChannel#position()position 将始终等于 getFilePointer 方法返回的此对象的文件指针偏移量。显式或者通过读取或写入字节来更改此对象的文件指针偏移量将更改通道的位置,反之亦然。通过此对象更改此文件的长度将更改通过文件通道看到的长度,反之亦然。

返回:
与此文件关联的文件通道
从以下版本开始:
1.4

read

public int read()
         throws IOException
从此文件中读取一个数据字节。以整数形式返回此字节,范围在 0 到 255 (0x00-0x0ff)。如果尚无输入可用,将阻塞此方法。

尽管 RandomAccessFile 不是 InputStream 的子类,但此方法的行为与 InputStreamInputStream.read() 方法完全一样。

返回:
下一个数据字节,如果已到达文件的末尾,则返回 -1
抛出:
IOException - 如果发生 I/O 错误。如果已到达文件的末尾,则不抛出此异常。

read

public int read(byte[] b,
                int off,
                int len)
         throws IOException
将最多 len 个数据字节从此文件读入字节数组。在至少一个输入字节可用前,此方法一直阻塞。

尽管 RandomAccessFile 不是 InputStream 的子类,但此方法的行为与 InputStreamInputStream.read(byte[], int, int) 方法完全一样。

参数:
b - 读入数据的缓冲区。
off - 数据的初始偏移量。
len - 读取的最多字节数。
返回:
读入缓冲区的总字节数,如果由于已到达文件的末尾而不再有数据,则返回 -1
抛出:
IOException - 如果发生 I/O 错误。

read

public int read(byte[] b)
         throws IOException
将最多 b.length 个数据字节从此文件读入字节数组。在至少一个输入字节可用前,此方法一直阻塞。

尽管 RandomAccessFile 不是 InputStream 的子类,但此方法的行为与 InputStreamInputStream.read(byte[]) 方法完全一样。

参数:
b - 将数据读入的缓冲区。
返回:
读入缓冲区的总字节数,如果由于已到达此文件的末尾而不再有数据,则返回 -1
抛出:
IOException - 如果发生 I/O 错误。

readFully

public final void readFully(byte[] b)
                     throws IOException
b.length 个字节从此文件读入字节数组,并从当前文件指针开始。此方法将从该文件重复读取,直到读取了请求数量的字节。在读取了请求数量的字节、检测到流的末尾或者抛出异常前,此方法一直阻塞。

指定者:
接口 DataInput 中的 readFully
参数:
b - 将数据读入的缓冲区。
抛出:
EOFException - 如果在读取所有字节之前此文件已到达末尾。
IOException - 如果发生 I/O 错误。