public class RandomAccessFile extends Object implements DataOutput, DataInput, Closeable
getFilePointer
方法和由设置seek
方法。
在这个类中的所有读取例程通常都是如果在读取所需的字节数之前到达文件结尾,则抛出一个EOFException
(这是一种IOException
)。 如果任何字节由于除文件末尾之外的任何原因而无法读取,则抛出IOException
以外的EOFException
。 特别地,如果流已经被关闭,则可以抛出IOException
。
Constructor and Description |
---|
RandomAccessFile(File file, String mode)
创建一个随机访问文件流从 File 参数指定的文件中读取,并可选地写入文件。
|
RandomAccessFile(String name, String mode)
创建随机访问文件流,以从中指定名称的文件读取,并可选择写入文件。
|
Modifier and Type | Method and Description |
---|---|
void |
close()
关闭此随机访问文件流并释放与流相关联的任何系统资源。
|
FileChannel |
getChannel()
返回与此文件关联的唯一的 FileChannel 对象。
|
FileDescriptor |
getFD()
返回与此流关联的不透明文件描述符对象。
|
long |
getFilePointer()
返回此文件中的当前偏移量。
|
long |
length()
返回此文件的长度。
|
int |
read()
从该文件读取一个字节的数据。
|
int |
read(byte[] b)
从该文件读取最多
b.length 字节的数据到字节数组。
|
int |
read(byte[] b, int off, int len)
从该文件读取最多
len 个字节的数据到字节数组。
|
boolean |
readBoolean()
从此文件读取一个
boolean 。
|
byte |
readByte()
从此文件中读取一个带符号的八位值。
|
char |
readChar()
从此文件中读取一个字符。
|
double |
readDouble()
从此文件读取
double 。
|
float |
readFloat()
从此文件读取一个
float 。
|
void |
readFully(byte[] b)
从此文件读取
b.length 字节到字节数组,从当前文件指针开始。
|
void |
readFully(byte[] b, int off, int len)
从此文件中读取
len 个字节到字节数组,从当前文件指针开始。
|
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 个字节到该文件,从当前文件指针开始。
|
void |
write(byte[] b, int off, int len)
从指定的字节数组写入
len 个字节,从偏移量
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)
双参数传递给转换
long 使用
doubleToLongBits 方法在类
Double ,然后写入该
long 值到该文件作为一个八字节的数量,高字节。
|
void |
writeFloat(float v)
浮子参数的转换
int 使用
floatToIntBits 方法在类
Float ,然后写入该
int 值到该文件作为一个四字节数量,高字节。
|
void |
writeInt(int v)
将
int 写入文件为四个字节,高字节
int 。
|
void |
writeLong(long v)
将
long 写入文件为八个字节,高字节为先。
|
void |
writeShort(int v)
将
short 写入文件作为两个字节,高字节优先。
|
void |
writeUTF(String str)
以机器无关的方式使用
modified UTF-8编码将字符串写入文件。
|
public RandomAccessFile(String name, String mode) throws FileNotFoundException
FileDescriptor
对象来表示与该文件的连接。
mode参数指定要打开文件的访问模式。 允许的值及其含义如RandomAccessFile(File,String) 构造函数所规定。
如果有一个安全管理器,它的checkRead
方法被调用,以name
参数作为参数,以查看是否允许对该文件的读取访问。 如果该模式允许写入,那么安全管理器的checkWrite
方法也name
参数作为参数进行调用,以查看是否允许对该文件的写访问。
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参数指定要打开文件的访问模式。 允许的值及其含义是:
Value Meaning "r" Open for reading only. Invoking any of the write methods of the resulting object will cause anIOException
to be thrown. "rw" Open for reading and writing. If the file does not already exist then an attempt will be made to create it. "rws" Open for reading and writing, as with "rw", and also require that every update to the file's content or metadata be written synchronously to the underlying storage device. "rwd" Open for reading and writing, as with "rw", and also require that every update to the file's content be written synchronously to the underlying storage device.
FileChannel
类的force(boolean)
方法,分别传递了true和false的参数,但它们总是适用于每个I / O操作,因此通常更有效。
如果文件驻留在本地存储设备上,则当该类的方法的调用返回时,将保证通过该调用对文件所做的所有更改都将被写入该设备。
这对于确保系统崩溃时不会丢失关键信息非常有用。
如果文件不在本地设备上,则不会提供此类保证。
"rwd"模式可用于减少执行的I / O操作数。 使用"rwd"只需要更新要写入存储的文件内容; 使用"rws"需要更新要写入的文件的内容及其元数据,这通常需要至少一个低级I / O操作。
如果有一个安全管理器,它的checkRead
方法被调用,其路径名为file
参数作为参数,以查看是否允许对该文件的读取访问。 如果模式允许写入,则还使用path参数调用安全管理器的checkWrite
方法,以查看是否允许对该文件的写访问。
file
- 文件对象
mode
- 访问模式,如描述
above
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
对象。
返回通道的position
将始终等于getFilePointer
方法返回的此对象的文件指针偏移量。 改变此对象的文件指针偏移量,无论是显式地还是通过读取或写入字节,都会改变通道的位置,反之亦然。 通过该对象更改文件的长度将改变通过文件通道看到的长度,反之亦然。
public int read() throws IOException
0x00-0x0ff
)。
如果没有输入可用,此方法将阻止。
虽然RandomAccessFile
不是RandomAccessFile
的子类, InputStream
该方法的行为与InputStream的InputStream.read()
方法InputStream
。
-1
。
IOException
- 如果发生I / O错误。
如果达到文件结尾,则不会抛出。
public int read(byte[] b, int off, int len) throws IOException
len
字节的数据到字节数组。
该方法阻塞,直到输入的至少一个字节可用。
虽然RandomAccessFile
不是RandomAccessFile
的子类, InputStream
该方法的行为方式与InputStream的InputStream.read(byte[], int, int)
方法InputStream
。
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
个字节的数据到字节数组。
该方法阻塞,直到输入的至少一个字节可用。
虽然RandomAccessFile
不是RandomAccessFile
的子类, InputStream
该方法的行为方式与InputStream的InputStream.read(byte[])
方法InputStream
。
b
- 读取数据的缓冲区。
-1
。
IOException
- 如果第一个字节由于除文件结尾之外的任何原因或随机访问文件已关闭或发生其他I / O错误而无法读取。
NullPointerException
- 如果
b
是
null
。
public final void readFully(byte[] b) throws IOException
b.length
字节到字节数组,从当前文件指针开始。
该方法从文件中重复读取,直到读取所请求的字节数。
该方法阻塞,直到读取所请求的字节数,检测到流的结尾,或抛出异常。
readFully
在界面
DataInput
b
- 读取数据的缓冲区。
EOFException
- 如果此文件在读取所有字节之前到达结束。
IOException
- 如果发生I / O错误。
public final void readFully(byte[] b, int off, int len) throws IOException
len
字节到字节数组,从当前文件指针开始。
该方法从文件中重复读取,直到读取所请求的字节数。
该方法阻塞,直到读取所请求的字节数,检测到流的结尾,或抛出异常。
readFully
在界面
DataInput
b
- 读取数据的缓冲区。
off
- 数据的起始偏移量。
len
- 要读取的字节数。
EOFException
- 如果此文件在读取所有字节之前到达结束。
IOException
- 如果发生I / O错误。
public int skipBytes(int n) throws IOException
n
字节的输入,丢弃跳过的字节。
该方法可能跳过一些较小数量的字节,可能为零。 这可能是由许多条件中的任何一个引起的 n
字节之前已经跳过的文件到达结束只有一种可能。 这种方法永远不会抛出一个EOFException
。 返回实际跳过的字节数。 如果n
为负,则不跳过任何字节。
skipBytes
在界面
DataInput
n
- 要跳过的字节数。
IOException
- 如果发生I / O错误。
public void write(int b) throws IOException
write
在界面
DataOutput
b
-
byte
。
IOException
- 如果发生I / O错误。
public void write(byte[] b) throws IOException
b.length
字节从指定的字节数组写入此文件,从当前文件指针开始。
write
在接口
DataOutput
b
- 数据。
IOException
- 如果发生I / O错误。
public void write(byte[] b, int off, int len) throws IOException
len
个字节,从偏移量
off
开始到此文件。
write
在界面
DataOutput
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
如果此文件具有关联的通道,则通道也将关闭。
close
在接口
Closeable
close
在界面
AutoCloseable
IOException
- 如果发生I / O错误。
public final boolean readBoolean() throws IOException
boolean
。
该方法从文件中读取单个字节,从当前文件指针开始。
0
的价值为false
。
任何其他值代表true
。
该方法阻塞直到字节被读取,流的结束被检测到或抛出异常。
readBoolean
在界面
DataInput
boolean
读取值。
EOFException
- 如果此文件已到达结束。
IOException
- 如果发生I / O错误。
public final byte readByte() throws IOException
b
,其中0 <= b <= 255
,那么结果是:
(byte)(b)
该方法阻塞直到字节被读取,流的结束被检测到或抛出异常。
readByte
在界面
DataInput
byte
。
EOFException
- 如果此文件已到达结束。
IOException
- 如果发生I / O错误。
public final int readUnsignedByte() throws IOException
该方法阻塞直到字节被读取,流的结束被检测到或抛出异常。
readUnsignedByte
在界面
DataInput
EOFException
- 如果此文件已到达结束。
IOException
- 如果发生I / O错误。
public final short readShort() throws IOException
b1
和b2
,其中两个值之间的值分别为0
和255
之间,则结果等于:
(short)((b1 << 8) | b2)
此方法将阻塞,直到读取两个字节,检测到流的结尾,或抛出异常。
readShort
在界面
DataInput
EOFException
- 如果此文件在读取两个字节之前到达结束。
IOException
- 如果发生I / O错误。
public final int readUnsignedShort() throws IOException
b1
和b2
,其中0 <= b1, b2 <= 255
,则结果等于:
(b1 << 8) | b2
此方法将阻塞,直到读取两个字节,检测到流的结尾,或抛出异常。
readUnsignedShort
在接口
DataInput
EOFException
- 如果此文件在读取两个字节之前到达结束。
IOException
- 如果出现I / O错误。
public final char readChar() throws IOException
b1
和b2
,其中0 <= b1, b2 <= 255
,那么结果等于:
(char)((b1 << 8) | b2)
此方法将阻塞,直到读取两个字节,检测到流的结尾,或抛出异常。
readChar
在界面
DataInput
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
该方法阻塞,直到读取四个字节,检测到流的结尾,或抛出异常。
readInt
在界面
DataInput
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
该方法阻塞,直到读取8个字节,检测到流的结尾,或抛出异常。
readLong
在界面
DataInput
long
。
EOFException
- 如果此文件在读取八个字节之前到达结束。
IOException
- 如果发生I / O错误。
public final float readFloat() throws IOException
float
。
此方法读取一个int
值,并从当前文件指针,就好像由readInt
方法,然后转换该int
至float
使用intBitsToFloat
在类方法Float
。
该方法阻塞,直到读取四个字节,检测到流的结尾,或抛出异常。
readFloat
在界面
DataInput
float
。
EOFException
- 如果此文件在读取四个字节之前到达结束。
IOException
- 如果发生I / O错误。
readInt()
,
Float.intBitsToFloat(int)
public final double readDouble() throws IOException
double
。
此方法读取一个long
值,并从当前文件指针,就好像由readLong
方法,然后转换该long
至double
使用longBitsToDouble
在类方法Double
。
该方法阻塞,直到读取8个字节,检测到流的结尾,或抛出异常。
readDouble
在界面
DataInput
double
。
EOFException
- 如果此文件在读取八个字节之前到达结束。
IOException
- 如果发生I / O错误。
readLong()
,
Double.longBitsToDouble(long)
public final String readLine() throws IOException
一行文本由回车字符( '\r'
),换行字符( '\n'
),紧随换行符的回车字符或文件结尾终止。 行终止字符被丢弃,不包括返回的字符串的一部分。
该方法阻塞直到读取换行字符,回车并读取其后面的字节(以查看它是否为换行符),到达文件的结尾或抛出异常。
readLine
在接口
DataInput
IOException
- 如果发生I / O错误。
public final String readUTF() throws IOException
从当前文件指针开始读取前两个字节,如readUnsignedShort
。 该值给出编码字符串中的以下字节数,而不是生成字符串的长度。 然后,以下字节将被解释为以修改的UTF-8格式编码字符的字节,并将其转换为字符。
该方法阻塞,直到读取所有字节,检测到流的结尾,或抛出异常。
readUTF
在界面
DataInput
EOFException
- 如果此文件在读取所有字节之前到达结束。
IOException
- 如果发生I / O错误。
UTFDataFormatException
- 如果字节不表示Unicode字符串的有效修改的UTF-8编码。
readUnsignedShort()
public final void writeBoolean(boolean v) throws IOException
boolean
写入文件作为一个字节值。
值true
被写出为值(byte)1
;
值false
写出为值(byte)0
。
写入从文件指针的当前位置开始。
writeBoolean
在接口
DataOutput
v
-
boolean
值。
IOException
- 如果发生I / O错误。
public final void writeByte(int v) throws IOException
byte
写入文件作为一个字节值。
写入从文件指针的当前位置开始。
writeByte
在界面
DataOutput
v
- 一个
byte
值要写。
IOException
- 如果发生I / O错误。
public final void writeShort(int v) throws IOException
short
写入文件作为两个字节,高位字节。
写入从文件指针的当前位置开始。
writeShort
在界面
DataOutput
v
- 一个
short
要写。
IOException
- 如果发生I / O错误。
public final void writeChar(int v) throws IOException
char
写入文件作为双字节值,高字节优先。
写入从文件指针的当前位置开始。
writeChar
在界面
DataOutput
v
-
char
值。
IOException
- 如果发生I / O错误。
public final void writeInt(int v) throws IOException
int
写入文件作为四个字节,高字节优先。
写入从文件指针的当前位置开始。
writeInt
在接口
DataOutput
v
-
int
。
IOException
- 如果发生I / O错误。
public final void writeLong(long v) throws IOException
long
写入文件为八个字节,高字节为先。
写入从文件指针的当前位置开始。
writeLong
在界面
DataOutput
v
- a
long
待写。
IOException
- 如果发生I / O错误。
public final void writeFloat(float v) throws IOException
int
使用floatToIntBits
方法在类Float
,然后写入该int
值到该文件作为一个四字节数量,高字节。
写入从文件指针的当前位置开始。
writeFloat
在界面
DataOutput
v
- 一个
float
值要写。
IOException
- 如果发生I / O错误。
Float.floatToIntBits(float)
public final void writeDouble(double v) throws IOException
long
中的doubleToLongBits
方法将双参数转换为Double
,然后将long
值写入文件,为八字节数量,高字节long
。
写入从文件指针的当前位置开始。
writeDouble
在界面
DataOutput
v
-
double
值。
IOException
- 如果发生I / O错误。
Double.doubleToLongBits(double)
public final void writeBytes(String s) throws IOException
writeBytes
在界面
DataOutput
s
- 要写入的字节串。
IOException
- 如果发生I / O错误。
public final void writeChars(String s) throws IOException
writeChar
方法。
写入从文件指针的当前位置开始。
writeChars
在界面
DataOutput
s
- 要写入的
String
值。
IOException
- 如果发生I / O错误。
writeChar(int)
public final void writeUTF(String str) throws IOException
首先,从当前文件指针开始,将两个字节写入文件,就像writeShort
方法给出要跟随的字节数一样。 该值是实际写出的字节数,而不是字符串的长度。 按照长度,字符串的每个字符顺序地使用每个字符的修改的UTF-8编码输出。
writeUTF
在界面
DataOutput
str
- 要写入的字符串。
IOException
- 如果发生I / O错误。