概述
-------android培训
、
JAVA培训、期待与您交流! ----------
RandomAccessFile 是随机读取访问的类,这类不算是IO体系中的子类,而是直接继承自Object,但是他是IO包中的成员,因为他具备读和写的功能,内部封装了一个数组,而且通过指针对数组中的元素进行操作,可以通过getFilePointer获取指针位置,同时可以通过Seek 改变指针的位置, 其实完成读写的原理就是内部封装了,字节输入流和输出流, 通过构造函数可以看出,该类值能操作文件,而且操作文件还有模式, 模式:只读r, 读写:rw
如果模式为r,不会创建文件,会去读取一个已存在的文件,如果该文件不存在,则会出现异常。
如果模式为rw的话,而且该对象的构造函数要操作的文件不存在,会自动创建,如果存在,则不会覆盖
那么我们可以通过以下这个例子进行分析
import java.io.*;
public class RandomAccessFile_demo {
public void RandomAccessFile_demo1() throws IOException{
RandomAccessFile w = new RandomAccessFile("rd.txt","rw");
w.write("李四".getBytes());//写入了四个字节,两个汉字,一个汉字占两个字节
w.writeInt(98);/*此处写年龄时需要用writeInt方法,如果使用write方法,根据帮助文档,write是按照一个字节写入文件的方法
98在一个字节之内,但是如果是258,则超过了一个字节,258转换二进制的后八位,并根据ASCII表找对应的符号
所以此处应该使用writeInt方法,按照四个字节写入文件
*/
w.write("王五".getBytes());
w.writeInt(120);
w.seek(8*3);//将指针放在数组第8*3个位置,及以下操作从这个位置进行,意思是,上面写的李四、王五,加上年龄,一共是占了2*8个字节
//效果是,王五和李四之间,空了8个字节,这就是该类的随机读写特有方法
//效果:李四 b王五 x 张三 ?
//w.seek(8*0),如果此处从8*0个位置开始写,则会把李四、98覆盖,这个方法的特有方式是指针可以前后移动,
//相反,skipByte(8)方法,则是跳过8个字节,后进行读写操作,但是跳过后,就不能会跳了,指针无法往回移动。
w.write("张三".getBytes());
w.writeInt(170);
w.close();
}
public void RandomAccessFile_demo2() throws IOException{
RandomAccessFile r = new RandomAccessFile("rd.txt","rw");
r.seek(8*3);//根据测试例子,从数组的第8*3的位置读取,即读出的是 张三 170
byte[] bt = new byte[4];
r.read(bt);//将文件读取,放到bt数组中,由于测试例子,李四是四个字节,所以此处读取bt.lengh的长度的数据存在四个字节数组中
String name = new String(bt);//将存满的bt数组,转换成字符串
System.out.println("name = "+name);//输出字符串
int age = r.readInt();//根据测试例子,然后读取一个32位整数,即4个字节,由于之前存放的年龄就是四个字节,此处取出的是年龄
System.out.println("age = "+age);
r.close();
}
}
-------android培训、JAVA培训、期待与您交流! ----------
--------详细请查看www.itheima.com-------------
最后
以上就是动听烧鹅为你收集整理的<黑马程序员>RandomAccessFile类的使用简述的全部内容,希望文章能够帮你解决<黑马程序员>RandomAccessFile类的使用简述所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复