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();
}
}
RandomAccessFile随机访问文件的读取和写入
最新推荐文章于 2024-09-28 18:43:38 发布