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

/*
这类不算是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();
	}
}

你可能感兴趣的:(IO)