RandomAccessFile的使用方法和案例分析

来源:互联网 发布:死亡实验2001知乎 编辑:程序博客网 时间:2024/06/05 08:05



import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.jar.Attributes.Name;


/*RandomAccessFile:该类不能算是io体系中子类,而是直接继承自object
 * 但是它是io包中成员,因为它具有读和写的功能。内部封装了一个数组,而且通过指针对数组
 * 的元素进行操作,可以通过getfilepointer获取指针位置
 * 
 * 其实完成读写的原理就是内部封装了字节流输出流和输入流
 * 通过构造函数可以看出,该类只能操作文件。而且操作文件还有模式只读r读写rw等
 * 如果模式为只读r,不会创建文件。会去读取一个已经存在文件,如果该文件不存在,则会出现异常
 * 如果模式为rw而且该对象的构造函数要操作的文件不存在,会自动创建。如果存在会自动覆盖。
 * 
 * 功能:可以实现数据的分段写入,可以写入,可以读取,可以修改,
 */
public class RandomAccessFileDemo {
public static void main(String[] args) {
try {
writeFile();
readFile();
} catch (IOException e) {
e.printStackTrace();
}
}
//读的过程
public static void  readFile() throws IOException{
RandomAccessFile raf=new RandomAccessFile("d:\\ran.txt", "r");
//调整对象中的指针
raf.seek(8);
//跳过指定的字节数,但是不能往回走,只能往后跳
raf.skipBytes(8);
//定义一个数组,每次读取4个字节
byte[]buf=new byte[4];
raf.read(buf);
String name=new String(buf);
int age=raf.readInt();//一次读取四个字节


System.out.println("name=\n"+name);
System.out.println("age=\n"+age );
raf.close();


}


//写入到指定位置,可以中间空着
public static void  writeFile2() throws IOException{
RandomAccessFile  raf=new RandomAccessFile("d:\\ran.txt", "rw");
raf.seek(8*3);
raf.write("zhouqi".getBytes());
raf.writeInt(103);


}
//写的过程
public static void  writeFile() throws IOException{
RandomAccessFile  raf=new RandomAccessFile("d:\\ran.txt", "rw");
raf.write("lisi".getBytes());
raf.write(97);
raf.write("zhangsan".getBytes());
raf.write(98);
raf.close();
}
}
0 0