Android文件相关:RandomAccessFile介绍与使用demo



原创文章,转载请注明出处:http://blog.csdn.net/android_zyf/article/details/63428241


一,RandomAccessFile是用来干嘛的?

在访问文件时,文件就是一个大型的byte数组,存在指向该隐含数组的光标或索引,称为文件指针.
RandomAccessFile的实例对象,可以通过挪动该指针,有选择性的获取文件中的内容.
类似于根据角标在数组或集合中取值.
api文档地址:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

示例

RandomAccessFile每次读取数组中的一元素,就会将文件指针挪动一个位置.
如果 RandomAccessFile的实例对象以读取/写入模式创建,那么可以从文件指针的位置,开始写入文件,并且每写入一个字节,文件指针会对应着向前移动一个位置.
在写入的过程中,如果超出隐含数组的 length后继续写入,那么会导致该数组扩展.
文件指针的获取方式与设置方式在下面的方法介绍中有.
注: 如果数组length为10,如果做类似操作:读取11个元素.那么会抛出 EOFException异常(是一种IOException).
注: 如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException,而不是 EOFException。
注: 如果流已被关闭,则可能抛出 IOException。

二,方法介绍

构造方法

RandomAccessFile(File file, String mode)
* 创建从中读取和向其中写入(可选)的随机访问文件流,参数为一个文件对象.

RandomAccessFile(String name, String mode)
* 创建从中读取和向其中写入(可选)的随机访问文件流,参数为一个文件的绝对路径.

关于mode参数:
* “r” 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。
* “rw” 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。
* “rws” 打开以便读取和写入,对于 “rw”,还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。
* “rwd” 打开以便读取和写入,对于 “rw”,还要求对文件内容的每个更新都同步写入到底层存储设备。

获取文件指针

long getFilePointer() :得到该RandomAccessFile对象当前的偏移量

设置文件指针

void seek(long pos) :将文件指针移动到pos位置,在该位置发生下一个读取或写入操作。

获得文件长度与设置文件长度

long length() :返回此文件的长度.
void setLength(long newLength) :设置此文件的长度

跳过

int skipBytes(int n) :尝试跳过输入的 n 个字节以丢弃跳过的字节.

获得文件通道对象

FileChannel getChannel() :返回与此文件关联的唯一 FileChannel 对象(文件通道对象).

读取与写入的方法就是read与write,代码提示一找就ok了.

三,示例代码

byte[] result = new byte[1024];

//根据文件路径,获得对应的可读randomAccessFile对象
//以只读模式打开文件
RandomAccessFile randomAccessFile = new RandomAccessFile(table.getBookFile(),"r");

//将randomAccessFile对象关联的文件中的内容,读取到result字节数组中
randomAccessFile.read(result);
//将读取到的1024个字节,转换成字符串形式,准备展示
String showContent = new String(result);

//获得当前的文件指针的角标,保存在currentIndex中
long currentIndex = randomAccessFile.getFilePointer();

//读取下一段内容
randomAccessFile.read(result);

//读取上一段内容
//先讲文件指针的角标挪到前面两个1024长度的位置
//比如有三百个数,你查了一百个:从0-100
//又查了一百个:从100-200
//那么现在角标是200
//你想查上一段的内容
//应该从0开始查,差一百个,获取到的内容才是正确的
//所以这里挪两个1024的长度
randomAccessFile.seek(currentIndex - 1024 * 2);

//再读一段内容到result数组中
randomAccessFile.read(result);
//准备显示下面的数据
showContent = new String(result);
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值