RandomAccessFile
RandomAccessFile是java输入/输出流体系中功能最丰富的文件内容访问类,它提供了众多的方法来访问文件内容,它既可以读取文件内容,也可以向文件输出数据,与普通的输出/输入流不同的是,RandomAccessFile支持"随机访问"的方式,程序可以直接跳转到文件的任意地方来读写数据。
由于RandomAccessFile可以自由的访问文件的任意位置,所以如果只需要访问文件的部分内容,而不是把文件从头读到尾,使用RandomAccessFile是更好的选择
“随机访问”?
“随机访问”应该是由RandomAccess这两个单词直接翻译而来,而Random在英语中不仅有随机的意思,还有任意的意思,因此用“任意访问”来理解RandomAccessFile,就很好理解了,所以RandomAccessFile的含义是可以自由的访问文件的任意的地方。
构造方法
RandomAccessFile(File file, String mode)
RandomAccessFile(String name, String mode)
这两个构造方法基本上一致,只是指定的参数类型不同,一个使用String类型来指定文件名,一个使用File类型来指定文件本身。不过创建RandomAccessFile的对象时还需要指定一个mode参数,该参数是指定RandomAccessFile的访问模式,该参数有如下4个值(具体参见API文档):
值
含意
"r" 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException
。"rw" 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。 "rws" 打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。 "rwd" 打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。
常用方法
RandomAccessFile对象包含了一个记录指针,用以标识当前读写处的位置,当程序新创建一个RandomAccessFile对象时,该对象的文件记录指针的文件头(也就时0处),当读/写了n个字节后,文件记录指针将会向后移动n个字节。除此之外,RandomAccessFile可以自由移动该记录指针,既可以向前移动,也可以向后移动。
long getFilePointer():返回文件记录指针的当前位置
void seek(long pos):将文件记录指针定位到pos位置
long length() 返回此文件的长度
void setLength(long newLength) 设置此文件的长度
其他方法参见API文档
示例:
注意事项:
在输出的时候,没有设置文件指针,会从头开始写数据,之前有的数据会被覆盖(不会覆盖所有的,而是新数据所占据的位置)
每次启动程序,默认的指针在文件的开头