RandomAccessFile(随即读取)操作文件有4种模式:"r"、"rw"、"rws" 或 "rwd"

来源:互联网 发布:物理动画软件 编辑:程序博客网 时间:2024/05/10 23:47
/*这类不算是IO体系中的子类。而是直接继承Object但是它是IO包中的成员,因为它具备读和写的功能。能完成读写的原理是内部封装了字节输入流和输出流。而且内部还封装了一个数组,通过指针对数组的元素进行操作。可通过getFilePointer获取指针位置。也可通过seek改变指针的位置。通过构造函数可以看出,该类只能操作文件。操作文件有4种模式:"r"、"rw"、"rws" 或 "rwd"如果模式为只读r。则不会创建文件,而是会去读取一个已经存在的文件,如果读取的文件不存在则会出现异常。如果模式为rw读写。如果文件不存在则会去创建文件,如果存在则不会创建。可以实现多线程下载!因为seek可以调节指针,这样可以开启多个线程,来写相同间隔的数据。*/import java.io.*;class  RandomAccessFileDemo{public static void main(String[] args) throws IOException{//method2();RandomAccessFile raf=new RandomAccessFile("ran1.txt","r");}public static void method1()throws IOException//写的第一种方法,从前往后写。{RandomAccessFile raf=new RandomAccessFile("ran.txt","r");//调整对象中的指针。直接从第八个字节开始读。最好有规律,例如姓名和年龄一组,8个字节往后取。 //raf.seek(8);//跳过指定的字节数,只能往后跳。往前不行。raf.skipBytes(8);byte by[]=new byte[4];raf.read(by);String name=new String(by);System.out.println(name);int age=raf.readInt();//一次读取下4个字节,并转成int类型。System.out.println(age);raf.close();}public static void method2()throws IOException //写的第二种方法,从指定位置开始写。{RandomAccessFile raf=new RandomAccessFile("ran.txt","rw");raf.seek(8*3);//从第三个8字节写。raf.seek(0)就会修改第一个8字节中的内容,不会覆盖后面的内容。raf.write("赵六".getBytes());raf.writeInt(103);raf.close();}public static void method()throws IOException{RandomAccessFile raf=new RandomAccessFile("ran.txt","rw");raf.write("李四".getBytes());raf.writeInt(97);//raf.write(258);  这个二进制是100000010;如果用write的话只写了最低8位。没有保持数据原样性。需要用writeInt();raf.write("王五".getBytes());raf.writeInt(99);raf.close();}}

原创粉丝点击