RandomAccessFile 类
此类的实例支持对随机存取文件的读取和写入。随机存取文件的行为类似存储在文件系统中的一个大型字节数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机存取文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过getFilePointer
方法读取,并通过 seek
方法设置。
通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException
(是一种 IOException
)。如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出IOException
,而不是 EOFException
。需要特别指出的是,如果流已被关闭,则可能抛出 IOException
。
文件随机读取
该类不是IO体系中子类。
而使直接继承自Object。
但是它是IO包中成员。因为它具备读和写功能。
把文件抽象成一个数组,通过指针对数组的元素进行操作。
可以通过getFilePointer获取指针位置。
同时可以通过seek改变指针的位置。
完成读写的原理是 内部封装了字节输入输出流。
通过构造函数可以看出,该类只能操作文件。
而且操作文件还有模式,只读r ,读写 rw等。
如果模式为只读 r.不会创建文件。会去读取一个已存在的文件,如果该文件不存在,则会出现异常。
如果模式为rw.操作的文件不存在,会自动创建。如果存在则不会覆盖。
构造方法摘要 | |
---|---|
RandomAccessFile(File file, 创建从中读取和向其中写入(可选)的随机存取文件流,该文件由 File 参数指定。 |
|
RandomAccessFile(String name, 创建从中读取和向其中写入(可选)的随机存取文件流,该文件具有指定名称。 |
方法摘要 | |
---|---|
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() 从此文件读取一个 Unicode 字符。 |
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) 使用 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 编码以与机器无关的方式将一个字符串写入该文件。 |