|
JavaTM Platform Standard Ed. 6 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.lang.Object java.io.RandomAccessFile
public class RandomAccessFile
此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer
方法读取,并通过 seek
方法设置。
通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException
(是一种 IOException
)。如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException
,而不是 EOFException
。需要特别指出的是,如果流已被关闭,则可能抛出 IOException
。
构造方法摘要 | |
---|---|
RandomAccessFile(File file,
String mode)
创建从中读取和向其中写入(可选)的随机访问文件流,该文件由 File 参数指定。 |
|
RandomAccessFile(String name,
String mode)
创建从中读取和向其中写入(可选)的随机访问文件流,该文件具有指定名称。 |
方法摘要 | |
---|---|
void |
close()
关闭此随机访问文件流并释放与该流关联的所有系统资源。 |
FileChannel |
getChannel()
返回与此文件关联的唯一 FileChannel 对象。 |
FileDescriptor |
getFD()
返回与此流关联的不透明文件描述符对象。 |
long |
getFilePointer()
返回此文件中的当前偏移量。 |
long |
length()
返回此文件的长度。 |
int |
read()
从此文件中读取一个数据字节。 |
int |
read(byte[] b)
将最多 b.length 个数据字节从此文件读入 byte 数组。 |
int |
read(byte[] b,
int off,
int len)
将最多 len 个数据字节从此文件读入 byte 数组。 |
boolean |
readBoolean()
从此文件读取一个 boolean 。 |
byte |
readByte()
从此文件读取一个有符号的八位值。 |
char |
readChar()
从此文件读取一个字符。 |
double |
readDouble()
从此文件读取一个 double 。 |
float |
readFloat()
从此文件读取一个 float 。 |
void |
readFully(byte[] b)
将 b.length 个字节从此文件读入 byte 数组,并从当前文件指针开始。 |
void |
readFully(byte[] b,
int off,
int len)
将正好 len 个字节从此文件读入 byte 数组,并从当前文件指针开始。 |
int |
readInt()
从此文件读取一个有符号的 32 位整数。 |
String |
readLine()
从此文件读取文本的下一行。 |
long |
readLong()
从此文件读取一个有符号的 64 位整数。 |
short |
readShort()
从此文件读取一个有符号的 16 位数。 |
int |
readUnsignedByte()
从此文件读取一个无符号的八位数。 |
int |
readUnsignedShort()
从此文件读取一个无符号的 16 位数。 |
String |
readUTF()
从此文件读取一个字符串。 |
void |
seek(long pos)
设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。 |
void |
setLength(long newLength)
设置此文件的长度。 |
int |
skipBytes(int n)
尝试跳过输入的 n 个字节以丢弃跳过的字节。 |
void |
write(byte[] b)
将 b.length 个字节从指定 byte 数组写入到此文件,并从当前文件指针开始。 |
void |
write(byte[] b,
int off,
int len)
将 len 个字节从指定 byte 数组写入到此文件,并从偏移量 off 处开始。 |
void |
write(int b)
向此文件写入指定的字节。 |
void |
writeBoolean(boolean v)
按单字节值将 boolean 写入该文件。 |
void |
writeByte(int v)
按单字节值将 byte 写入该文件。 |
void |
writeBytes(String s)
按字节序列将该字符串写入该文件。 |
void |
writeChar(int v)
按双字节值将 char 写入该文件,先写高字节。 |
void |
writeChars(String s)
按字符序列将一个字符串写入该文件。 |
void |
writeDouble(double v)
使用 Double 类中的 doubleToLongBits 方法将双精度参数转换为一个 long ,然后按八字节数量将该 long 值写入该文件,先定高字节。 |
void |
writeFloat(float v)
使用 Float 类中的 floatToIntBits 方法将浮点参数转换为一个 int ,然后按四字节数量将该 int 值写入该文件,先写高字节。 |
void |
writeInt(int v)
按四个字节将 int 写入该文件,先写高字节。 |
void |
writeLong(long v)
按八个字节将 long 写入该文件,先写高字节。 |
void |
writeShort(int v)
按两个字节将 short 写入该文件,先写高字节。 |
void |
writeUTF(String str)
使用 modified UTF-8 编码以与机器无关的方式将一个字符串写入该文件。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
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)
public RandomAccessFile(File file, String mode) throws FileNotFoundException
File
参数指定。将创建一个新的 FileDescriptor
对象来表示此文件的连接。
mode 参数指定用以打开文件的访问模式。允许的值及其含意为:
"rws" 和 "rwd" 模式的工作方式极其类似
值
含意
"r" 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException
。"rw" 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。 "rws" 打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。 "rwd" 打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。
FileChannel
类的 force(boolean)
方法,分别传递 true 和 false 参数,除非它们始终应用于每个 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)
方法详细信息 |
---|
public final FileDescriptor getFD() throws IOException
IOException
- 如果发生 I/O 错误。FileDescriptor
public final FileChannel getChannel()
FileChannel
对象。
返回通道的 java.nio.channels.FileChannel#position()
position 将始终等于
getFilePointer
方法返回的此对象的文件指针偏移量。显式或者通过读取或写入字节来更改此对象的文件指针偏移量将更改通道的位置,反之亦然。通过此对象更改此文件的长度将更改通过文件通道看到的长度,反之亦然。
public int read() throws IOException
0x00-0x0ff
)。如果尚无输入可用,将阻塞此方法。
尽管 RandomAccessFile
不是 InputStream
的子类,但此方法的行为与 InputStream
的 InputStream.read()
方法完全一样。
-1
。
IOException
- 如果发生 I/O 错误。如果已到达文件的末尾,则不抛出此异常。public int read(byte[] b, int off, int len) throws IOException
len
个数据字节从此文件读入 byte 数组。在至少一个输入字节可用前,此方法一直阻塞。
尽管 RandomAccessFile
不是 InputStream
的子类,但此方法的行为与 InputStream
的 InputStream.read(byte[], int, int)
方法完全一样。
b
- 读入数据的缓冲区。off
- 写入数据的数组 b
中的初始偏移量。len
- 读取的最多字节数。
-1
。
IOException
- 如果由于文件结束之外的某种原因不能读取第一个字节,或者随机访问文件已关闭,或者发生其他 I/O 错误。
NullPointerException
- 如果 b
为 null
。
IndexOutOfBoundsException
- 如果 off
为负,len
为负,或者 len
大于 b.length - off
public int read(byte[] b) throws IOException
b.length
个数据字节从此文件读入 byte 数组。在至少一个输入字节可用前,此方法一直阻塞。
尽管 RandomAccessFile
不是 InputStream
的子类,但此方法的行为与 InputStream
的 InputStream.read(byte[])
方法完全一样。
b
- 将数据读入的缓冲区。
-1
。
IOException
- 如果由于文件结束之外的某种原因不能读取第一个字节,或者随机访问文件已关闭,或者发生其他 I/O 错误。
NullPointerException
- 如果 b
为 null
。public final void readFully(byte[] b) throws IOException
b.length
个字节从此文件读入 byte 数组,并从当前文件指针开始。在读取到请求数量的字节之前,此方法将从该文件重复读取。在读取了请求数量的字节、检测到流的末尾或者抛出异常前,此方法一直阻塞。
DataInput
中的 readFully
b
- 将数据读入的缓冲区。
EOFException
- 如果在读取所有字节之前此文件已到达末尾。
IOException
- 如果发生 I/O 错误。public final void readFully(byte[] b, int off, int len) throws IOException
len
个字节从此文件读入 byte 数组,并从当前文件指针开始。在读取到请求数量的字节之前,此方法将从该文件重复读取。在读取了请求数量的字节、检测到流的末尾或者抛出异常前,此方法一直阻塞。
DataInput
中的 readFully
b
- 读入数据的缓冲区。off
- 数据的初始偏移量。len
- 要读取的字节数。
EOFException
- 如果在读取所有字节之前此文件已到达末尾。
IOException
- 如果发生 I/O 错误。public int skipBytes(int n) throws IOException
n
个字节以丢弃跳过的字节。
此方法可能跳过一些较少数量的字节(可能包括零)。这可能由任意数量的条件引起;在跳过 n
个字节之前已到达文件的末尾只是其中的一种可能。此方法从不抛出 EOFException
。返回跳过的实际字节数。如果 n
为负数,则不跳过任何字节。
DataInput
中的 skipBytes
n
- 要跳过的字节数。
IOException
- 如果发生 I/O 错误。public void write(int b) throws IOException
DataOutput
中的 write
b
- 要写入的 byte
。
IOException
- 如果发生 I/O 错误。public void write(byte[] b) throws IOException
b.length
个字节从指定 byte 数组写入到此文件,并从当前文件指针开始。
DataOutput
中的 write
b
- 数据。
IOException
- 如果发生 I/O 错误。public void write(byte[] b, int off, int len) throws IOException
len
个字节从指定 byte 数组写入到此文件,并从偏移量 off
处开始。
DataOutput
中的 write
b
- 数据。off
- 数据的初始偏移量。len
- 要写入的字节数。
IOException
- 如果发生 I/O 错误。public long getFilePointer() throws IOException
IOException
- 如果发生 I/O 错误。public void seek(long pos) throws IOException
pos
- 从文件开头以字节为单位测量的偏移量位置,在该位置设置文件指针。
IOException
- 如果 pos
小于 0
或者发生 I/O 错误。public long length() throws IOException
IOException
- 如果发生 I/O 错误。public void setLength(long newLength) throws IOException
如果 length
方法返回的文件的现有长度大于 newLength
参数,则该文件将被截短。在此情况下,如果 getFilePointer
方法返回的文件偏移量大于 newLength
,那么在返回此方法后,该偏移量将等于 newLength
。
如果 length
方法返回的文件的现有长度小于 newLength
参数,则该文件将被扩展。在此情况下,未定义文件扩展部分的内容。
newLength
- 文件的所需长度
IOException
- 如果发生 I/O 错误public void close() throws IOException
如果此文件具有一个关联的通道,那么该通道也会被关闭。
Closeable
中的 close
IOException
- 如果发生 I/O 错误。public final boolean readBoolean() throws IOException
boolean
。此方法从该文件的当前文件指针开始读取单个字节。值 0
表示 false
。其他任何值表示 true
。在读取了该字节、检测到流的末尾或者抛出异常前,此方法一直阻塞。
DataInput
中的 readBoolean
boolean
值。
EOFException
- 如果此文件已到达末尾。
IOException
- 如果发生 I/O 错误。public final byte readByte() throws IOException
b
,其中 0 <= b <= 255
,则结果将是:
(byte)(b)
在读取了该字节、检测到流的末尾或者抛出异常前,此方法一直阻塞。
DataInput
中的 readByte
byte
形式返回此文件的下一个字节。
EOFException
- 如果此文件已到达末尾。
IOException
- 如果发生 I/O 错误。public final int readUnsignedByte() throws IOException
在读取了该字节、检测到流的末尾或者抛出异常前,此方法一直阻塞。
DataInput
中的 readUnsignedByte
EOFException
- 如果此文件已到达末尾。
IOException
- 如果发生 I/O 错误。public final short readShort() throws IOException
b1
和 b2
,其中两个值都在 0
和 255
之间(包含),则此结果等于:
(short)((b1 << 8) | b2)
在读取了这两个字节、检测到流的末尾或者抛出异常前,此方法一直阻塞。
DataInput
中的 readShort
EOFException
- 如果在读取两个字节之前此文件已到达末尾。
IOException
- 如果发生 I/O 错误。public final int readUnsignedShort() throws IOException
b1
和 b2
,其中 0 <= b1, b2 <= 255
,则结果将等于:
(b1 << 8) | b2
在读取了这两个字节、检测到流的末尾或者抛出异常前,此方法一直阻塞。
DataInput
中的 readUnsignedShort
EOFException
- 如果在读取两个字节之前此文件已到达末尾。
IOException
- 如果发生 I/O 错误。public final char readChar() throws IOException
b1
和 b2
,其中 0 <= b1, b2 <= 255
,则结果将等于:
(char)((b1 << 8) | b2)
在读取了这两个字节、检测到流的末尾或者抛出异常前,此方法一直阻塞。
DataInput
中的 readChar
char
。
EOFException
- 如果在读取两个字节之前此文件已到达末尾。
IOException
- 如果发生 I/O 错误。public final int readInt() throws IOException
b1
、b2
、b3
和 b4
,其中 0 <= b1, b2, b3, b4 <= 255
,则结果将等于:
(b1 << 24) | (b2 << 16) + (b3 << 8) + b4
在读取了这四个字节、检测到流的末尾或者抛出异常前,此方法一直阻塞。
DataInput
中的 readInt
int
。
EOFException
- 如果在读取四个字节之前此文件已到达末尾。
IOException
- 如果发生 I/O 错误。public final long readLong() throws IOException
b1
、b2
、b3
、b4
、b5
、b6
、b7
和 b8
,其中:
0 <= b1, b2, b3, b4, b5, b6, b7, b8 <=255,
则结果将等于:
((long)b1 << 56) + ((long)b2 << 48) + ((long)b3 << 40) + ((long)b4 << 32) + ((long)b5 << 24) + ((long)b6 << 16) + ((long)b7 << 8) + b8
在读取了这八个字节、检测到流的末尾或者抛出异常前,此方法一直阻塞。
DataInput
中的 readLong
long
。
EOFException
- 如果在读取八个字节之前此文件已到达末尾。
IOException
- 如果发生 I/O 错误。public final float readFloat() throws IOException
float
。此方法从当前文件指针开始读取一个 int
值,类似于使用 readInt
方法,然后使用 Float
类中的 intBitsToFloat
方法将该 int
转换为一个 float
。
在读取了这四个字节、检测到流的末尾或者抛出异常前,此方法一直阻塞。
DataInput
中的 readFloat
float
。
EOFException
- 如果在读取四个字节之前此文件已到达末尾。
IOException
- 如果发生 I/O 错误。readInt()
,
Float.intBitsToFloat(int)
public final double readDouble() throws IOException
double
。此方法从当前文件指针开始读取一个 long
值,类似于使用 readLong
方法,然后使用 Double
类中的 longBitsToDouble
方法将该 long
转换为一个 double
。
在读取了这八个字节、检测到流的末尾或者抛出异常前,此方法一直阻塞。
DataInput
中的 readDouble
double
。
EOFException
- 如果在读取八个字节之前此文件已到达末尾。
IOException
- 如果发生 I/O 错误。readLong()
,
Double.longBitsToDouble(long)
public final String readLine() throws IOException
文本行由回车符 ('\r'
) 和一个换行符 ('\n'
) 结束,回车符后面紧跟一个换行符,或者是文件的末尾。不使用行结束符,并且在返回的字符串中不包括结束符。
在读取了一个换行符、读取了一个回车符和它后面的字节(查看是否为一个新行),到达文件的末尾或者抛出异常之前,此方法一直阻塞。
DataInput
中的 readLine
IOException
- 如果发生 I/O 错误。public final String readUTF() throws IOException
从当前文件指针开始读取前两个字节,类似于使用 readUnsignedShort
。此值给出已编码字符串中随后的字节数,而不是结果字符串的长度。随后的字节然后解释为 UTF-8 修改版格式的字节编码字符,并转换为字符。
在读取了所有字节、检测到流的末尾或者抛出异常前,此方法一直阻塞。
DataInput
中的 readUTF
EOFException
- 如果在读取所有字节之前此文件已到达末尾。
IOException
- 如果发生 I/O 错误。
UTFDataFormatException
- 如果这些字节不表示 Unicode 字符串的有效 UTF-8 修改版编码。readUnsignedShort()
public final void writeBoolean(boolean v) throws IOException
boolean
写入该文件。值 true
写出为值 (byte)1
;值 false
写出为值 (byte)0
。写入从文件指针的当前位置开始。
DataOutput
中的 writeBoolean
v
- 要写入的 boolean
值。
IOException
- 如果发生 I/O 错误。public final void writeByte(int v) throws IOException
byte
写入该文件。写入从文件指针的当前位置开始。
DataOutput
中的 writeByte
v
- 要写入的 byte
值。
IOException
- 如果发生 I/O 错误。public final void writeShort(int v) throws IOException
short
写入该文件,先写高字节。写入从文件指针的当前位置开始。
DataOutput
中的 writeShort
v
- 要写入的 short
。
IOException
- 如果发生 I/O 错误。public final void writeChar(int v) throws IOException
char
写入该文件,先写高字节。写入从文件指针的当前位置开始。
DataOutput
中的 writeChar
v
- 要写入的 char
值。
IOException
- 如果发生 I/O 错误。public final void writeInt(int v) throws IOException
int
写入该文件,先写高字节。写入从文件指针的当前位置开始。
DataOutput
中的 writeInt
v
- 要写入的 int
。
IOException
- 如果发生 I/O 错误。public final void writeLong(long v) throws IOException
long
写入该文件,先写高字节。写入从文件指针的当前位置开始。
DataOutput
中的 writeLong
v
- 要写入的 long
。
IOException
- 如果发生 I/O 错误。public final void writeFloat(float v) throws IOException
Float
类中的 floatToIntBits
方法将浮点参数转换为一个 int
,然后按四字节数量将该 int
值写入该文件,先写高字节。写入从文件指针的当前位置开始。
DataOutput
中的 writeFloat
v
- 要写入的 float
值。
IOException
- 如果发生 I/O 错误。Float.floatToIntBits(float)
public final void writeDouble(double v) throws IOException
Double
类中的 doubleToLongBits
方法将双精度参数转换为一个 long
,然后按八字节数量将该 long
值写入该文件,先定高字节。写入从文件指针的当前位置开始。
DataOutput
中的 writeDouble
v
- 要写入的 double
值。
IOException
- 如果发生 I/O 错误。Double.doubleToLongBits(double)
public final void writeBytes(String s) throws IOException
DataOutput
中的 writeBytes
s
- 要写入的字节的字符串。
IOException
- 如果发生 I/O 错误。public final void writeChars(String s) throws IOException
writeChar
方法。写入从文件指针的当前位置开始。
DataOutput
中的 writeChars
s
- 要写入的 boolean
值。
IOException
- 如果发生 I/O 错误。writeChar(int)
public final void writeUTF(String str) throws IOException
首先,把两个字节从文件的当前文件指针写入到此文件,类似于使用 writeShort
方法并给定要跟随的字节数。此值是实际写出的字节数,而不是该字符串的长度。在该长度之后,按顺序输出该字符串的每个字符,并对每个字符使用 UTF-8 修改版编码。
DataOutput
中的 writeUTF
str
- 要写入的字符串。
IOException
- 如果发生 I/O 错误。
|
JavaTM Platform Standard Ed. 6 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。