- 所有已实现的接口:
-
Closeable,DataInput,DataOutput,AutoCloseable
getFilePointer方法读取,并通过seek方法设置。
通常情况下,该类中的所有读取例程都是这样的:如果在读取所需字节数之前达到文件结尾,则会抛出一个EOFException(这是一种IOException)。如果由于除文件结尾之外的任何原因而无法读取任何字节,则会抛出一个除EOFException之外的IOException。特别地,如果流已关闭,则可能会抛出IOException。
- 自 JDK 版本:
- 1.0
-
Constructor Summary
ConstructorsConstructorDescriptionRandomAccessFile(File file, String mode) 创建一个随机访问文件流以从指定的文件读取,并可选择写入。RandomAccessFile(String name, String mode) 创建一个随机访问文件流以从具有指定名称的文件读取,并可选择写入。 -
Method Summary
Modifier and TypeMethodDescriptionvoidclose()关闭此随机访问文件流并释放与该流关联的任何系统资源。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) 将双精度参数转换为long,使用Double类中的doubleToLongBits方法,然后将该long值作为一个八字节数量,高字节在前,写入文件。final voidwriteFloat(float v) 将浮点参数转换为int,使用Float类中的floatToIntBits方法,然后将该int值作为一个四字节数量,高字节在前,写入文件。final voidwriteInt(int v) 将一个int作为四个字节,高字节在前,写入文件。final voidwriteLong(long v) 将一个long作为八个字节,高字节在前,写入文件。final voidwriteShort(int v) 将一个short作为两个字节,高字节在前,写入文件。final void以机器无关的方式使用修改的 UTF-8编码将字符串写入文件。
-
Constructor Details
-
RandomAccessFile
创建一个随机访问文件流以从具有指定名称的文件读取,并可选择写入。创建一个新的FileDescriptor对象来表示与文件的连接。mode参数指定要打开文件的访问模式。允许的值及其含义如RandomAccessFile(File,String)构造函数中所指定的。如果存在安全管理器,则将
name参数作为其参数调用其checkRead方法,以查看是否允许对文件进行读取。如果模式允许写入,则还将调用安全管理器的checkWrite方法,将name参数作为其参数,以查看是否允许对文件进行写入。- 参数:
-
name- 系统相关的文件名 -
mode- 访问模式 - 抛出:
-
IllegalArgumentException- 如果模式参数不等于"r"、"rw"、"rws"或"rwd" -
FileNotFoundException- 如果模式为"r"但给定的字符串不表示现有的常规文件,或者如果模式以"rw"开头但给定的字符串不表示现有的可写入的常规文件且无法创建具有该名称的新常规文件,或者在打开或创建文件时发生其他错误 -
SecurityException- 如果存在安全管理器并且其checkRead方法拒绝对文件的读取访问,或者如果模式为"rw"并且安全管理器的checkWrite方法拒绝对文件的写入访问 - 参见:
-
RandomAccessFile
创建一个随机访问文件流,用于从指定的文件中读取,并可选择写入。创建一个新的FileDescriptor对象来表示此文件连接。mode参数指定文件打开时的访问模式。允许的值及其含义如下:
"rws"和"rwd"模式的工作方式类似于FileChannel类的force(boolean)方法,分别传递true和false参数,但它们始终适用于每个I/O操作,因此通常更有效。如果文件位于本地存储设备上,则当此类的方法调用返回时,保证该调用对文件所做的所有更改都已写入该设备。这对于确保在系统崩溃时不会丢失关键信息很有用。如果文件不位于本地设备上,则不提供此类保证。值 含义 "r"仅用于读取。调用结果对象的任何write方法将导致抛出IOException。 "rw"用于读取和写入。如果文件不存在,则尝试创建它。 "rws"用于读取和写入,与"rw"相同,并且要求将对文件内容或元数据的每次更新同步写入底层存储设备。 "rwd"用于读取和写入,与"rw"相同,并且要求将文件内容的每次更新同步写入底层存储设备。 "rwd"模式可用于减少执行的I/O操作数量。仅使用"rwd"需要将文件内容的更新写入存储;使用"rws"需要将文件内容和元数据的更新都写入,这通常需要至少一个更多的低级I/O操作。
如果存在安全管理器,则将使用文件参数的路径名调用其checkRead方法,以查看是否允许对文件的读取访问。如果模式允许写入,则还将使用路径参数调用安全管理器的checkWrite方法,以查看是否允许对文件的写入访问。
- 参数:
- file - 文件对象
- mode - 访问模式,如上所述
- 抛出:
- IllegalArgumentException - 如果模式参数不等于"r"、"rw"、"rws"或"rwd"
- FileNotFoundException - 如果模式为"r"但给定的文件对象不表示现有的常规文件,或者如果模式以"rw"开头但给定的文件对象不表示现有的可写入的常规文件且无法创建具有该名称的新常规文件,或者在打开或创建文件时发生其他错误
- SecurityException - 如果存在安全管理器且其checkRead方法拒绝对文件的读取访问,或者如果模式为"rw"且安全管理器的checkWrite方法拒绝对文件的写入访问
- 参见:
-
-
Method Details
-
getFD
返回与此流关联的不透明文件描述符对象。- 返回:
- 与此流关联的文件描述符对象。
- 抛出:
- IOException - 如果发生I/O错误。
- 参见:
-
getChannel
返回与此文件关联的唯一FileChannel对象。返回的通道的位置始终等于此对象的文件指针偏移量,该偏移量由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
从当前文件指针开始,从此文件读取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中 - API注释:
- 如果此流有关联的通道,则此方法将关闭通道,进而关闭此流。重写此方法的子类应准备处理可能的重入调用。
- 抛出:
-
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位整数。该方法从文件开始处的当前文件指针开始读取8个字节。如果按顺序读取的字节分别为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
从此文件中读取下一行文本。该方法连续从文件中读取字节,从当前文件指针开始,直到达到行终止符或文件结尾。每个字节都会被转换为一个字符,方法是将字符的低8位取为字节的值,并将字符的高8位设置为零。因此,该方法不支持完整的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方法转换为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错误。
-