您的位置:首页 > 其它

RandomAccessFile 随机访问文件

2012-07-13 22:05 495 查看
该类不算是IO体系中的子类,而是直接继承自Object。

但是它是IO包中的成员,因为它 具备读和写的功能。内部封装了一个数组,而且通过指针对数据的元素进行操作,

可以通过getFilePointer获取指针位置

可以通过seek改变指针的位置

可以完成读写的原因:类内部封装了字节输入流和输出流

局限性:该类只能操作文件,而且操作文件还有模式:r 读 rw 读写。

如果模式为:r 不会创建文件,会去读取一个已存在的文件,如果该文件不存在,则会出现异常。

如果模式为:rw 那么操作的文件不存在,会自动创建,如果存在则不会覆盖。

例:

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

public class RandomDemo
{

/**
* @param args
*/
public static void main(String[] args) throws Exception
{

// TODO Auto-generated method stub
// writeFile();
readFile();
}

public static void readFile() throws Exception
{

RandomAccessFile raf = new RandomAccessFile("D:\\tmp\\ran.txt", "r");

raf.seek(8 * 1);// 设置指针,比如这里,名单由名称和年龄组成,一起共8位。所以这里我也可以设置读第几名单。

raf.skipBytes(8);// 跳过8位,再读取或写入

byte[] buf = new byte[4];
raf.read(buf);
String name = new String(buf);

int age = raf.readInt();

System.out.println("name:" + name);
System.out.println("age:" + age);

raf.close();
}

public static void writeFile() throws Exception
{

RandomAccessFile raf = new RandomAccessFile("D:\\tmp\\ran.txt", "rw");// 设置文件为读写

raf.write("张三".getBytes());
// raf.write(259);//
// 这里写入为什么是乱码呢?因为write只写入int型的最低8位,8位表达最大的值255,所以这里丢精度了。可以改成writeInt()将int的4个8位全写入。或者将int转换为byte再一个字节一个字节的写入。
// raf.writeInt(259);
raf.writeInt(97);// 在文件中是这样:王五空格空格空格a 这中间有三个空格。
raf.write("赵六".getBytes());
raf.writeInt(99);
raf.close();
}

public static void writeFile_2() throws IOException
{

RandomAccessFile raf = new RandomAccessFile("ran.txt", "rw");
raf.seek(8 * 0);// 这里将会修改第一个名单的数据,其实就是覆盖掉了
raf.write("周期".getBytes());
raf.writeInt(103);

raf.close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: