原创文章,转载请注明出处: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);

更多相关文章

  1. Android(安卓)ClassLoader
  2. android 数据存储之 SharedPreference
  3. Android(安卓)反编译
  4. 从Android到React Native开发(一、入门)
  5. Android网络请求框架AsyncHttpClient (android-async-http)介绍
  6. Android学习路线(二十七)键值对(SharedPreferences)存储
  7. 两个Android选择文件对话框
  8. Android(安卓)Intent 对象详解
  9. 转:编写高效的Android代码

随机推荐

  1. 转: Android开机时桌面Widget的载入流程
  2. Android(安卓)网络应用重点———使用Htt
  3. SQLite3 在应用启动时初始化数据
  4. 【Android(安卓)开发】:UI控件之时间和日
  5. Eclipse 下配置Android开发环境
  6. java go nginx android https 单向 双向
  7. Android(安卓)缓存机制
  8. Android(安卓)IPC进程间通讯机制学习笔记
  9. Android高手进阶教程(九)之 ----Android(
  10. Android应用签名