原创文章,转载请注明出处。 http://blog.csdn.net/Android _ zyf/article/details/63428241
一、随机存取文件是用来做什么的?
访问文件时,文件是一个大字节数组,包含指向此隐式数组的光标或索引,称为文件指针。
RandomAccessFile的实例对象可以通过移动该指针来选择性地获取文件的内容。
类似于根据索引为数组或集合取值。
api文档地址:3358 tool.oschina.net/API docs/apidoc? api=jdk-zh
每次导入数组中的元素时,RandomAccessFile都会移动一个文件指针。
如果RandomAccessFile实例对象是在读/写模式下创建的,则可以从文件指针的位置开始向文件写入。 文件指针每写入一个字节就对应于前一个位置。
在写入过程中,如果继续写入超过隐式数组的长度,则会扩展该数组。
文件指针的获取方式和设定方式在以下方法的介绍中。
注:数组的length为10时,类似:的操作将读取11个要素。 抛出EOFException异常(IOException )。
注意:如果由于某种原因而无法读取字节(而不是在读取所需数量的字节之前到达文件末尾),则抛出IOException而不是EOFException。
注意,如果:流被关闭,则可能会抛出IOException。
二、方法介绍
构建方法
随机访问文件(文件文件,字符串模式)。
*创建可读写的随机访问文件流。 (可选)参数是文件对象。
随机访问文件(字符串名称,字符串模式) )。
*创建可读写的随机访问文件流。 参数是文件的绝对路径。
关于mode参数:
*“r”以只读方式打开。 调用结果对象的write方法时,会抛出IOException。
* “rw”打开以进行读取和写入。 如果文件尚不存在,请尝试创建文件。
* “rws”打开以进行读取和写入。 对于“rw”,每次更新文件内容或元数据时,都必须同步写入底层存储设备。
* “rwd”打开以进行读取和写入。 如果为“rw”,则必须与基础存储设备同步写入对文件内容的所有更新。
获取文件指针
long getFilePointer () :获取RandomAccessFile对象的当前偏移
文件指针设置
void seek (长pos ) :将文件指针移动到pos位置,并在该位置发生以下读取或写入操作:
获取文件长度和设定文件长度
long length () :返回此文件的长度。
void setlength (长长度) :设置此文件的长度
跳过
intskipbytes(intn ) :尝试跳过输入的n个字节并丢弃跳过的字节。
获取文件通道对象
文件通道获取通道() :返回与此文件关联的唯一文件通道对象(文件通道对象)。
读取和写入的方法为read和write,只要查找代码提示就可以了。
三.示例代码
byte[] result=new byte[1024];
//根据文件路径获取对应的可读random访问文件对象
//以只读模式打开文件
randomaccessfilerandomaccessfile=newrandomaccessfile (table.getboo kfile )、' r ' );
将与randomAccessFile对象关联的文件的内容导入到result字节数组中
random访问文件. read (result;
//将读取的1024字节转换为字符串形式,准备显示
字符串show content=new string (result;
//获取当前文件指针的角点,并将其保存到当前索引
longcurrentindex=random access file.getfile pointer (;
//读取下一段的内容
random访问文件. read (result;
//读取上一段的内容
//先将文件指针的角标记移动到前面两个1024长度的位置
/例如有300个个数,调查100个:从0-100开始
//另外调查100个:从100-200开始
//那么现在拐角标记是200
/你想查一下前一段的内容吗
应该从//0开始查,差了100个,得到的内容正确
//所以这里把1024的长度错开两个
random access file.seek (目前索引- 1024 * 2;
将内容重新读取到result数组
random访问文件. read (result;
//计划显示以下数据
show content=new string (结果;