/*
这类不算是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();
}
}
RandomAccessFile(随即读取)操作文件有4种模式:"r"、"rw"、"rws" 或 "rwd"
最新推荐文章于 2023-02-13 15:34:39 发布