- 所有已实现的接口:
Closeable,DataInput,DataOutput,AutoCloseable
getFilePointer方法读取,通过seek方法设置。
对于此类中的所有读取例程,如果在读取所需字节数之前到达文件末尾,则通常会抛出 EOFException(这是一种 IOException)。如果由于文件结束以外的任何原因无法读取任何字节,则会抛出 EOFException 以外的 IOException。特别是,如果流已关闭,可能会抛出 IOException。
- 自从:
- 1.0
-
构造方法总结
构造方法构造方法描述RandomAccessFile(File file, String mode) 创建一个随机访问文件流,以读取并可选地写入由File参数指定的文件。RandomAccessFile(String name, String mode) 创建一个随机访问文件流以从具有指定名称的文件中读取,并可选择写入。 -
方法总结
修饰符和类型方法描述voidclose()关闭此随机访问文件流并释放与该流关联的所有系统资源。final FileChannel返回与此文件关联的唯一FileChannel对象。final FileDescriptorgetFD()返回与此流关联的不透明文件描述符对象。long返回此文件中的当前偏移量。longlength()返回此文件的长度。intread()从此文件中读取一个字节的数据。intread(byte[] b) 从此文件中读取最多b.length字节的数据到字节数组中。intread(byte[] b, int off, int len) 从此文件中读取最多len字节的数据到字节数组中。final boolean从此文件中读取boolean。final bytereadByte()从此文件中读取一个带符号的八位值。final charreadChar()从此文件中读取一个字符。final double从此文件中读取double。final float从该文件中读取float。final voidreadFully(byte[] b) 从当前文件指针开始,将b.length个字节从此文件读入字节数组。final voidreadFully(byte[] b, int off, int len) 从当前文件指针开始,从该文件中准确读取len个字节到字节数组中。final intreadInt()从此文件中读取带符号的 32 位整数。final StringreadLine()从此文件中读取下一行文本。final longreadLong()从此文件中读取带符号的 64 位整数。final short从此文件中读取带符号的 16 位数字。final int从此文件中读取一个无符号的八位数字。final int从此文件中读取一个无符号的 16 位数字。final StringreadUTF()从此文件中读入一个字符串。voidseek(long pos) 设置文件指针偏移量,从该文件的开头开始测量,下一次读取或写入发生在该位置。voidsetLength(long newLength) 设置此文件的长度。intskipBytes(int n) 尝试跳过n字节的输入并丢弃跳过的字节。voidwrite(byte[] b) 从当前文件指针开始,将指定字节数组中的b.length字节写入此文件。voidwrite(byte[] b, int off, int len) 从偏移量off开始的指定字节数组中将len字节写入此文件。voidwrite(int b) 将指定字节写入此文件。final voidwriteBoolean(boolean v) 将boolean作为单字节值写入文件。final voidwriteByte(int v) 将byte作为单字节值写入文件。final voidwriteBytes(String s) 将字符串作为字节序列写入文件。final voidwriteChar(int v) 将char作为两字节值写入文件,高字节在前。final voidwriteChars(String s) 将字符串作为字符序列写入文件。final voidwriteDouble(double v) 使用类Double中的doubleToLongBits方法将双精度参数转换为long,然后将该long值作为八字节量写入文件,高字节在前。final voidwriteFloat(float v) 使用类Float中的floatToIntBits方法将 float 参数转换为int,然后将该int值作为四字节量写入文件,高字节在前。final voidwriteInt(int v) 将int作为四个字节写入文件,高字节在前。final voidwriteLong(long v) 将long作为八个字节写入文件,高字节在前。final voidwriteShort(int v) 将short作为两个字节写入文件,高字节在前。final void以与机器无关的方式使用 修改后的 UTF-8 编码将字符串写入文件。
-
构造方法详细信息
-
RandomAccessFile
创建一个随机访问文件流以从具有指定名称的文件中读取,并可选择写入。创建一个新的FileDescriptor对象来表示与文件的连接。mode参数指定打开文件的访问模式。允许的值及其含义与RandomAccessFile(File,String)构造函数指定的一样。如果有安全管理器,它的
checkRead方法将被调用,并将name参数作为其参数,以查看是否允许对该文件进行读取访问。如果模式允许写入,安全管理器的checkWrite方法也会以name参数作为参数调用,以查看是否允许对该文件进行写入访问。- 参数:
name- 系统相关的文件名mode- 访问 模式- 抛出:
IllegalArgumentException- 如果模式参数不等于"r"、"rw"、"rws"或"rwd"之一FileNotFoundException- 如果模式是"r"但给定的字符串不表示现有的常规文件,或者如果模式以"rw"开头但给定的字符串不表示现有的可写常规文件并且无法创建该名称的新常规文件,或者如果在打开或创建文件时出现其他错误SecurityException- 如果安全管理器存在且其checkRead方法拒绝对文件的读访问或模式为"rw"并且安全管理器的checkWrite方法拒绝对文件的写访问- 参见:
-
RandomAccessFile
创建一个随机访问文件流,以读取并可选地写入由File参数指定的文件。创建一个新的FileDescriptor对象来表示此文件连接。mode参数指定打开文件的访问模式。允许的值及其含义是:Value 意义 "r"打开仅供阅读。调用结果对象的任何 write方法将导致抛出IOException。"rw"打开阅读和写作。如果该文件尚不存在,则会尝试创建它。 "rws"以读写方式打开,与 "rw"一样,还要求对文件内容或元数据的每次更新都同步写入底层存储设备。"rwd"以读写方式打开,与 "rw"一样,还要求对文件内容的每次更新都同步写入底层存储设备。"rws"和"rwd"模式的工作方式与FileChannel类的force(boolean)方法非常相似,分别传递true和false的参数,只是它们始终适用于每个 I/O 操作,因此通常效率更高。如果文件驻留在本地存储设备上,则当调用此类的方法返回时,可以保证该调用对文件所做的所有更改都已写入该设备。这对于确保在系统崩溃时不会丢失关键信息很有用。如果文件不驻留在本地设备上,则不提供此类保证。"rwd"模式可用于减少执行的 I/O 操作数。使用"rwd"只需要将文件内容更新写入存储;使用"rws"需要更新文件的内容及其要写入的元数据,这通常需要至少一个低级 I/O 操作。如果有安全管理器,它的
checkRead方法会以file参数的路径名作为参数调用,以查看是否允许对该文件进行读访问。如果模式允许写入,安全管理器的checkWrite方法也会使用路径参数调用,以查看是否允许对该文件进行写入访问。- 参数:
file- 文件对象mode- 访问模式,如 多于 所述- 抛出:
IllegalArgumentException- 如果模式参数不等于"r"、"rw"、"rws"或"rwd"之一FileNotFoundException- 如果模式是"r"但给定的文件对象不表示现有的常规文件,或者如果模式以"rw"开头但给定的文件对象不表示现有的可写常规文件并且该名称的新常规文件不能正在创建,或者如果在打开或创建文件时出现其他错误SecurityException- 如果安全管理器存在且其checkRead方法拒绝对文件的读访问或模式为"rw"并且安全管理器的checkWrite方法拒绝对文件的写访问- 参见:
-
-
方法详情
-
getFD
返回与此流关联的不透明文件描述符对象。- 返回:
- 与此流关联的文件描述符对象。
- 抛出:
IOException- 如果发生 I/O 错误。- 参见:
-
getChannel
返回与此文件关联的唯一FileChannel对象。返回通道的
position将始终等于getFilePointer方法返回的此对象的文件指针偏移量。更改此对象的文件指针偏移量,无论是显式还是通过读取或写入字节,都会更改通道的位置,反之亦然。通过此对象更改文件的长度将更改通过文件通道看到的长度,反之亦然。- 返回:
- 与此文件关联的文件通道
- 自从:
- 1.4
-
read
从此文件中读取一个字节的数据。该字节以 0 到 255 (0x00-0x0ff) 范围内的整数形式返回。如果尚无可用输入,则此方法会阻塞。尽管
RandomAccessFile不是InputStream的子类,但此方法的行为方式与InputStream的InputStream.read()方法完全相同。- 返回:
-
下一个数据字节,如果已到达文件末尾,则返回
-1。 - 抛出:
IOException- 如果发生 I/O 错误。如果已到达文件末尾,则不会抛出。
-
read
从此文件中读取最多len字节的数据到字节数组中。此方法会阻塞,直到至少有一个字节的输入可用。尽管
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
-
read
从此文件中读取最多b.length字节的数据到字节数组中。此方法会阻塞,直到至少有一个字节的输入可用。尽管
RandomAccessFile不是InputStream的子类,但此方法的行为方式与InputStream的InputStream.read(byte[])方法完全相同。- 参数:
b- 读取数据的缓冲区。- 返回:
-
读入缓冲区的字节总数,如果因为已到达此文件的末尾而没有更多数据,则为
-1。 - 抛出:
IOException- 如果第一个字节由于文件末尾以外的任何原因无法读取,或者如果随机访问文件已关闭,或者如果发生其他一些 I/O 错误。NullPointerException- 如果b是null。
-
readFully
从当前文件指针开始,将b.length个字节从此文件读入字节数组。此方法从文件中重复读取,直到读取到请求的字节数。此方法会阻塞,直到读取了请求的字节数、检测到流的末尾或抛出异常。- 指定者:
readFully在接口DataInput中- 参数:
b- 读取数据的缓冲区。- 抛出:
NullPointerException- 如果b是null。EOFException- 如果此文件在读取所有字节之前到达末尾。IOException- 如果发生 I/O 错误。
-
readFully
从当前文件指针开始,从该文件中准确读取len个字节到字节数组中。此方法从文件中重复读取,直到读取到请求的字节数。此方法会阻塞,直到读取了请求的字节数、检测到流的末尾或抛出异常。- 指定者:
readFully在接口DataInput中- 参数:
b- 读取数据的缓冲区。off- 数据数组b的起始偏移量。len- 要读取的字节数。- 抛出:
NullPointerException- 如果b是null。IndexOutOfBoundsException- 如果off为负,len为负,或len大于b.length - off。EOFException- 如果此文件在读取所有字节之前到达末尾。IOException- 如果发生 I/O 错误。
-
skipBytes
尝试跳过n字节的输入并丢弃跳过的字节。此方法可能会跳过一些较小数量的字节,可能为零。这可能是由多种情况中的任何一种引起的;在跳过
n字节之前到达文件末尾只是一种可能性。此方法从不抛出EOFException。返回实际跳过的字节数。如果n为负,则不会跳过任何字节。- 指定者:
skipBytes在接口DataInput中- 参数:
n- 要跳过的字节数。- 返回:
- 实际跳过的字节数。
- 抛出:
IOException- 如果发生 I/O 错误。
-
write
将指定字节写入此文件。写入从当前文件指针开始。- 指定者:
write在接口DataOutput中- 参数:
b- 要写入的byte。- 抛出:
IOException- 如果发生 I/O 错误。
-
write
从当前文件指针开始,将指定字节数组中的b.length字节写入此文件。- 指定者:
write在接口DataOutput中- 参数:
b- 数据。- 抛出:
IOException- 如果发生 I/O 错误。
-
write
从偏移量off开始的指定字节数组中将len字节写入此文件。- 指定者:
write在接口DataOutput中- 参数:
b- 数据。off- 数据中的起始偏移量。len- 要写入的字节数。- 抛出:
IOException- 如果发生 I/O 错误。IndexOutOfBoundsException- 如果off为负,len为负,或者len大于b.length - off
-
getFilePointer
返回此文件中的当前偏移量。- 返回:
- 距文件开头的偏移量(以字节为单位),下一次读取或写入发生的位置。
- 抛出:
IOException- 如果发生 I/O 错误。
-
seek
设置文件指针偏移量,从该文件的开头开始测量,下一次读取或写入发生在该位置。偏移量可以设置在文件末尾之外。设置超出文件末尾的偏移量不会更改文件长度。只有在偏移量设置到文件末尾之后,文件长度才会改变。- 参数:
pos- 偏移位置,以字节为单位从文件开头测量,在该位置设置文件指针。- 抛出:
IOException- 如果pos小于0或者发生 I/O 错误。
-
length
返回此文件的长度。- 返回:
- 此文件的长度,以字节为单位。
- 抛出:
IOException- 如果发生 I/O 错误。
-
setLength
设置此文件的长度。如果
length方法返回的文件的当前长度大于newLength参数,则文件将被截断。在这种情况下,如果getFilePointer方法返回的文件偏移量大于newLength,则在此方法返回后偏移量将等于newLength。如果
length方法返回的文件的当前长度小于newLength参数,则文件将被扩展。在这种情况下,文件扩展部分的内容未定义。- 参数:
newLength- 所需的文件长度- 抛出:
IOException- 如果发生 I/O 错误- 自从:
- 1.2
-
close
关闭此随机访问文件流并释放与该流关联的所有系统资源。关闭的随机访问文件无法执行输入或输出操作,也无法重新打开。如果此文件有关联的通道,则该通道也会关闭。
- 指定者:
close在接口AutoCloseable中- 指定者:
close在接口Closeable中- 抛出:
IOException- 如果发生 I/O 错误。
-
readBoolean
从此文件中读取boolean。此方法从当前文件指针开始从文件中读取单个字节。0的值表示false。任何其他值表示true。此方法会阻塞,直到读取字节、检测到流的结尾或抛出异常。- 指定者:
readBoolean在接口DataInput中- 返回:
-
读取的
boolean值。 - 抛出:
EOFException- 如果此文件已结束。IOException- 如果发生 I/O 错误。
-
readByte
从此文件中读取一个带符号的八位值。此方法从文件中读取一个字节,从当前文件指针开始。如果读取的字节是b,其中0 <= b <= 255,那么结果是:(byte)(b)
此方法会阻塞,直到读取字节、检测到流的结尾或抛出异常。
- 指定者:
readByte在接口DataInput中- 返回:
-
此文件的下一个字节作为带符号的八位
byte。 - 抛出:
EOFException- 如果此文件已结束。IOException- 如果发生 I/O 错误。
-
readUnsignedByte
从此文件中读取一个无符号的八位数字。此方法从当前文件指针开始从此文件读取一个字节,并返回该字节。此方法会阻塞,直到读取字节、检测到流的结尾或抛出异常。
- 指定者:
readUnsignedByte在接口DataInput中- 返回:
- 此文件的下一个字节,解释为无符号的八位数字。
- 抛出:
EOFException- 如果此文件已结束。IOException- 如果发生 I/O 错误。
-
readShort
从此文件中读取带符号的 16 位数字。该方法从当前文件指针开始从该文件读取两个字节。如果按顺序读取的两个字节是b1和b2,其中两个值中的每一个都在0和255之间(含),则结果等于:(short)((b1 << 8) | b2)
此方法会阻塞,直到读取两个字节、检测到流的结尾或抛出异常。
- 指定者:
readShort在接口DataInput中- 返回:
- 此文件的下两个字节,解释为带符号的 16 位数字。
- 抛出:
EOFException- 如果此文件在读取两个字节之前到达末尾。IOException- 如果发生 I/O 错误。
-
readUnsignedShort
从此文件中读取一个无符号的 16 位数字。此方法从当前文件指针开始从文件中读取两个字节。如果读取的字节按顺序为b1和b2,其中0 <= b1, b2 <= 255,则结果等于:(b1 << 8) | b2
此方法会阻塞,直到读取两个字节、检测到流的结尾或抛出异常。
- 指定者:
readUnsignedShort在接口DataInput中- 返回:
- 此文件的下两个字节,解释为无符号 16 位整数。
- 抛出:
EOFException- 如果此文件在读取两个字节之前到达末尾。IOException- 如果发生 I/O 错误。
-
readChar
从此文件中读取一个字符。此方法从当前文件指针开始从文件中读取两个字节。如果读取的字节按顺序为b1和b2,其中0 <= b1, b2 <= 255,则结果等于:(char)((b1 << 8) | b2)
此方法会阻塞,直到读取两个字节、检测到流的结尾或抛出异常。
- 指定者:
readChar在接口DataInput中- 返回:
-
该文件的下两个字节,解释为
char。 - 抛出:
EOFException- 如果此文件在读取两个字节之前到达末尾。IOException- 如果发生 I/O 错误。
-
readInt
从此文件中读取带符号的 32 位整数。此方法从当前文件指针开始从文件中读取 4 个字节。如果读取的字节按顺序为b1、b2、b3和b4,其中0 <= b1, b2, b3, b4 <= 255,则结果等于:(b1 << 24) | (b2 << 16) + (b3 << 8) + b4
此方法会阻塞,直到读取四个字节、检测到流的结尾或抛出异常。
- 指定者:
readInt在接口DataInput中- 返回:
-
此文件的下四个字节,解释为
int。 - 抛出:
EOFException- 如果此文件在读取四个字节之前到达末尾。IOException- 如果发生 I/O 错误。
-
readLong
从此文件中读取带符号的 64 位整数。此方法从当前文件指针开始从文件中读取八个字节。如果读取的字节按顺序为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
此方法会阻塞,直到读取到八个字节、检测到流的结尾或抛出异常。
- 指定者:
readLong在接口DataInput中- 返回:
-
此文件的下八个字节,解释为
long。 - 抛出:
EOFException- 如果此文件在读取八个字节之前到达末尾。IOException- 如果发生 I/O 错误。
-
readFloat
从该文件中读取float。此方法读取一个int值,从当前文件指针开始,就像通过readInt方法一样,然后使用类Float中的intBitsToFloat方法将该int转换为float。此方法会阻塞,直到读取四个字节、检测到流的结尾或抛出异常。
- 指定者:
readFloat在接口DataInput中- 返回:
-
该文件的下四个字节,解释为
float。 - 抛出:
EOFException- 如果此文件在读取四个字节之前到达末尾。IOException- 如果发生 I/O 错误。- 参见:
-
readDouble
从此文件中读取double。此方法读取一个long值,从当前文件指针开始,就像通过readLong方法一样,然后使用类Double中的longBitsToDouble方法将该long转换为double。此方法会阻塞,直到读取到八个字节、检测到流的结尾或抛出异常。
- 指定者:
readDouble在接口DataInput中- 返回:
-
此文件的下八个字节,解释为
double。 - 抛出:
EOFException- 如果此文件在读取八个字节之前到达末尾。IOException- 如果发生 I/O 错误。- 参见:
-
readLine
从此文件中读取下一行文本。此方法连续从文件中读取字节,从当前文件指针开始,直到到达行终止符或文件末尾。通过为字符的低八位获取字节的值并将字符的高八位设置为零,每个字节被转换为一个字符。因此,此方法不支持完整的 Unicode 字符集。一行文本由回车符 (
'\r')、换行符 ('\n')、紧跟换行符的回车符或文件末尾终止。行终止字符被丢弃,并且不包括在返回的字符串中。此方法会阻塞,直到读取到换行符、读取回车符及其后的字节(以查看它是否是换行符)、到达文件末尾或抛出异常。
- 指定者:
readLine在接口DataInput中- 返回:
- 此文件的下一行文本,如果甚至在读取一个字节之前遇到文件末尾,则返回 null。
- 抛出:
IOException- 如果发生 I/O 错误。
-
readUTF
从此文件中读入一个字符串。该字符串已使用 修改后的 UTF-8 格式进行编码。前两个字节被读取,从当前文件指针开始,就像
readUnsignedShort一样。此值给出编码字符串中的后续字节数,而不是结果字符串的长度。随后的字节被解释为修改后的 UTF-8 格式的字节编码字符,并被转换为字符。此方法会阻塞,直到读取所有字节、检测到流的结尾或抛出异常。
- 指定者:
readUTF在接口DataInput中- 返回:
- 一个 Unicode 字符串。
- 抛出:
EOFException- 如果此文件在读取所有字节之前到达末尾。IOException- 如果发生 I/O 错误。UTFDataFormatException- 如果字节不代表 Unicode 字符串的有效修改后的 UTF-8 编码。- 参见:
-
writeBoolean
将boolean作为单字节值写入文件。值true被写为值(byte)1;值false被写为值(byte)0。写入从文件指针的当前位置开始。- 指定者:
writeBoolean在接口DataOutput中- 参数:
v- 要写入的boolean值。- 抛出:
IOException- 如果发生 I/O 错误。
-
writeByte
将byte作为单字节值写入文件。写入从文件指针的当前位置开始。- 指定者:
writeByte在接口DataOutput中- 参数:
v- 要写入的byte值。- 抛出:
IOException- 如果发生 I/O 错误。
-
writeShort
将short作为两个字节写入文件,高字节在前。写入从文件指针的当前位置开始。- 指定者:
writeShort在接口DataOutput中- 参数:
v- 要写入的short。- 抛出:
IOException- 如果发生 I/O 错误。
-
writeChar
将char作为两字节值写入文件,高字节在前。写入从文件指针的当前位置开始。- 指定者:
writeChar在接口DataOutput中- 参数:
v- 要写入的char值。- 抛出:
IOException- 如果发生 I/O 错误。
-
writeInt
将int作为四个字节写入文件,高字节在前。写入从文件指针的当前位置开始。- 指定者:
writeInt在接口DataOutput中- 参数:
v- 要写入的int。- 抛出:
IOException- 如果发生 I/O 错误。
-
writeLong
将long作为八个字节写入文件,高字节在前。写入从文件指针的当前位置开始。- 指定者:
writeLong在接口DataOutput中- 参数:
v- 要写入的long。- 抛出:
IOException- 如果发生 I/O 错误。
-
writeFloat
使用类Float中的floatToIntBits方法将 float 参数转换为int,然后将该int值作为四字节量写入文件,高字节在前。写入从文件指针的当前位置开始。- 指定者:
writeFloat在接口DataOutput中- 参数:
v- 要写入的float值。- 抛出:
IOException- 如果发生 I/O 错误。- 参见:
-
writeDouble
使用类Double中的doubleToLongBits方法将双精度参数转换为long,然后将该long值作为八字节量写入文件,高字节在前。写入从文件指针的当前位置开始。- 指定者:
writeDouble在接口DataOutput中- 参数:
v- 要写入的double值。- 抛出:
IOException- 如果发生 I/O 错误。- 参见:
-
writeBytes
将字符串作为字节序列写入文件。字符串中的每个字符通过丢弃其高八位按顺序写出。写入从文件指针的当前位置开始。- 指定者:
writeBytes在接口DataOutput中- 参数:
s- 要写入的字节串。- 抛出:
IOException- 如果发生 I/O 错误。
-
writeChars
将字符串作为字符序列写入文件。每个字符都被写入数据输出流,就像通过writeChar方法一样。写入从文件指针的当前位置开始。- 指定者:
writeChars在接口DataOutput中- 参数:
s- 要写入的String值。- 抛出:
IOException- 如果发生 I/O 错误。- 参见:
-
writeUTF
以与机器无关的方式使用 修改后的 UTF-8 编码将字符串写入文件。首先,将两个字节写入文件,从当前文件指针开始,就好像通过
writeShort方法给出后面的字节数一样。这个值是实际写出的字节数,而不是字符串的长度。在长度之后,字符串的每个字符按顺序输出,对每个字符使用修改后的 UTF-8 编码。- 指定者:
writeUTF在接口DataOutput中- 参数:
str- 要写入的字符串。- 抛出:
IOException- 如果发生 I/O 错误。
-