RandomAccessFile随机访问文件的读取和写入

import java.io.IOException;
import java.io.RandomAccessFile;

/*
 * RandomAccessFile
 * 该类不算是IO体系中的子类,而是直接继承Object类
 * 
 * 担是它是IO包中的成员,因为它也具备读和写的功能.
 * 内部封装了一个数组,而且通过指针对数组的元素进行操作
 * 可以通过getFilePointer()获取指针的位置,同时也可以通过seek()改变指针的位置
 * 
 * 其实完成读和写的原理是它内部封装了字节输出和输入流
 * 
 * 通过构造函数可以看出,该类只能操作文件
 * 而且操作文件还有操作模式:'r'是只读,'rw'是读和写等
 * 
 * 如果操作模式为'r',就不会创建文件,会去读取已存在的文件,若读取的文件不存在则会出现异常
 * 如果操作模式为'rw',如果操作文件不存在,它就会自动创建一个文件,如果存在则会覆盖。
 * 
 * 另:通过seek方法可以定义指针从任何的地方开始读或者写。
 * 缺点:就是存入的值最好有规律性,不然读取出来可能会是半个字符。
 * 优点:可以进行多线程的读取或写入,每个线程读写的指针下标设定好即可。
 * 
 * 
 * @author Tangtang
 *
 * 2015-6-2
 */
public class FileDemo8 {

	public static void main(String[] args) throws IOException {
		// writeFile();
		readFile();

	}

	/**
	 * 文件读取流
	 * 
	 * @throws IOException
	 */
	public static void readFile() throws IOException {
		// 输入参数'r',可以屏蔽写的功能
		RandomAccessFile raf = new RandomAccessFile("F:\\raf.txt", "r");

		// 此类可以调整指针,可以从任意的下标开始读取数据
		// raf.seek(8 * 1);
		// 跳过指定的字节数(注:此方法只能住后跳,不可以往前跳)
		raf.skipBytes(8);

		// 可以定义一个4个字节的数组,一次只取两个字符
		byte[] buf = new byte[4];

		raf.read(buf);
		// 获取四位字节的姓名
		String name = new String(buf);
		// 可以一次性读取32位的整数类型
		int age = raf.readInt();

		System.out.println("姓名:" + name + "--年龄:" + age);
	}

	/**
	 * 文件写入流
	 * 
	 * @throws IOException
	 */
	public static void writeFile() throws IOException {

		// 声明一个随机读写流(注:只支持这四种参数,否则会报参数异常!'r'为只读,'rw'可以读和写,'rws和rwd'可能同步更新)
		RandomAccessFile raf = new RandomAccessFile("F:\\raf.txt", "rw");

		raf.write("张三".getBytes());
		// 按四个字节将 int 写入该文件,先写高字节。
		raf.writeInt(97);

		raf.write("李四".getBytes());
		raf.writeInt(99);

		raf.close();

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值