RandomAccessFile为Java输入/输出流中最为丰富的文件内容访问类,这个类的实例支持读取和写入随机访问文件。随机访问文件的行为类似于存储在文件系统中的大量字节数组。在隐含数组中有一种游标或索引,称为文件指针;输入操作从文件指针开始读取字节,并将文件指针向前推进到读取字节之后。如果随机访问文件是在读/写模式下创建的,那么输出操作也是可用的;输出操作从文件指针开始写入字节,并将文件指针提前到写入的字节之后。在隐含数组的当前端之前写入的输出操作将导致数组的扩展。文件指针可以由getFilePointer方法读取,并由seek方法设置。
这个类中的所有读取例程通常都是正确的,如果在读取所需的字节数之前达到了文件结束,则抛出EOFException(这是一种IOException)。如果任何字节除了文件结尾以外的原因都不能读取,则抛出除EOFException之外的IOException。特别是,如果流已经关闭,可能会抛出一个IOException。
Constructor Summary(构造函数总结):
→RandomAccessFile(File file,String model):以File实例为参数创建一个随机访问文件流。
→RandomAccessFile(String name,String model):以指定名称创建一个随机访问文件流。
关于model参数:
"r" :以只读方式打开文件,试图写入将会抛出异常。
"rw" :以读取和写入的方式打开文件,如果该文件不存在,将会创建一个文件。
"rws" :以读取和写入的方式打开文件,相对于'rw"模式,对于文件的内容和元数据的更新都要同步写入到底层储存设备。
"rwd" :以读取和写入的方式打开文件,相对于"rw"模式,对于文件的内容的更新都要同步写入到底层储存设备。
Common Method Summary(常用方法总结):
→long length():返回此文件的大小。
→void setLength(long newLength):设置此文件的大小为newLength值。
→long getFilePointer():返回文件记录指针的当前位置。
→void seek(long pos):将文件记录指针设定到pos位置。
代码举例:
![](https://img.haomeiwen.com/i10178905/ab5fe11ad1813ac2.png)
![](https://img.haomeiwen.com/i10178905/d0a01b28ab8879fd.png)
注意:RandomAccessFile并不支持在内容之间写入数据,所以每次运行上面的程序的时候,我们需要将记录指针移到末尾,否则会覆盖掉原内容。所以我们可以设置一个缓冲区来解决:
![](https://img.haomeiwen.com/i10178905/db4b7c62ab96cb58.png)
网友评论