前面介绍了字符流读写文件的两种方式,包括文件字符流和缓存字符流,但是它们的写操作都存在一个问题:不管是write方法还是append方法,都只能从文件开头写入,而不能追加到文件末尾或者在文件中间某个位置写入。这个问题真不好办,它意味着每次写操作都会覆盖掉原来的文件内容,注意是直接覆盖而非局部修改,可大多数的业务场景需要在原文件基础上追加或者修改的。倘若坚持使用字符流修改文件内容,也不是不可以,那样得把原来的文件内容全部读到某个字符串,再对该字符串进行修改操作,最后把改后的字符串重新写入原文件。这么处理的话,对付小文件倒还凑合,要是遇到超大文件,比如大小达到1G的文件,光光把这1G的数据读到内存就足以让程序崩溃了。因此,通过字符流修改文件并非好办法,不如采用专门的文件修改工具即RandomAccessFile(随机访问文件类),该工具特别适合对文件做各种花式修改。随机文件工具RandomAccessFile提供了seek方法用来定位当前的读写位置,可以很方便地在指定位置写入数据,故而RandomAccessFile经常用于以下几个场合:
1、往大文件末尾追加数据。
2、下载文件时候的断点续传,支持从上次已下载完成的地方中途开始,而不必重头下载整个文件。
创建随机文件对象依然要指定文件路径,同时还要指定该文件的打开方式,下面是创建随机文件对象的代码例子:
// 根据文件路径创建既可读又可写的随机文件对象
String mAppendFileName = "D:/test/random_appendStr.txt";
RandomAccessFile raf = new RandomAccessFile(mAppendFileName, "rw");
<