RandomAccessFile是Java输入/输出流体系中功能最丰富的文件内容访问类,既可以写入,也可以输出。与普通输入输出流不同的是,它支持“随机访问”模式,程序可以跳到文件的任意地方来读写数据。因此,如果只需要访问文件的部分内容,则它是一个更好的选择。
但提供便利的同时,RandomAccessFile也有一个最大的局限,就是只能读写文件,而不能读写其他IO节点。
RandomAccessFile允许自由定位文件记录指针,所谓的文件记录指针就是当前读写处位置的标识。当创建了一个RandomAccessFile对象之后,该对象的文件记录指针位于文件头,也就是0.当读写了N个字节之后,文件记录指针将会向后移动N个字节。除此之外,RandomAccessFile还允许自由移动该记录指针,既可以向前,也可以向后。
操作文件记录指针
- long getFilePointer() :返回文件指针的当前位置
- void seek(long pos) : 将文件记录指针定位到pos位置
2个构造器
RandomAccessFile类有两个构造器,这两个构造器基本相同,只是指定文件的形式不同:一个使用String参数来指定文件名。一个使用File参数来指定文件本身。4种访问模式
- "r" : 以只读方式打开指定文件。如果试图执行写入方法,都将会抛出IOException错误。
- "rw" : 以读写方式打开指定文件。如果文件不存在,则会试图创建该文件。
- "rws" : 以读写方式打开指定文件。另外还要求如果对文件的内容或者元数据的每个更新都同步写入底层存储设备。
- "rwd" : 以读写方式打开指定文件。除此之外,还要求对文件内容的每个更新都同步写入底层存储设备。
不能在中间插入
虽然RandomAccessFile有这么多的便利,但是需要注意的是,它仍然不能向文件的指定位置插入内容,如果直接将文件记录指针移动到中间某位置后开始输出,则新输出的内容会覆盖文件中原有的内容。如果需要向指定位置插入内容,程序需要先把插入点后面的内容读入缓冲区,等把需要插入的数据写入文件后,再将缓冲区的内容追加到文件后面。
喜欢的话请扫码支持一下~~