RandomAccessFile 类
此类对象
特点:
⑴既能读取也可以写入。
⑵内部维护了一个大型的byte数组,通过对数组的操作完成读取和写入
⑶通过getFilePointer方法获取指针的位置,还可以通过seek方法设置指针的位置。
⑷该对象的内容应该封装了字节输入流和字节输出流
⑸该对象只能操作文件。
创建RandomAccessFile对象时,如果文件不存在则创建,如果文件存在则不创建。
public static void main(String[] args) throws IOException {
//writeFile();
//randomRead();
randomWrite();
}
/*
* 随机写入。
*/
public static void randomWrite()throws IOException{
RandomAccessFile raf = new RandomAccessFile("random.txt", "rw");
int num = 0;
raf.seek(8*num);
/*
* 写入第四个人的信息。王五 102.
*/
raf.write("张三".getBytes());
raf.writeInt(65);
raf.close();
}
/*
* 随机读取。
*/
public static void randomRead() throws IOException{
//读取任意一个人的信息,比如李四。
RandomAccessFile raf = new RandomAccessFile("random.txt", "r");
int n = 1;
//只要改变指针的位置,通过seek方法。
raf.seek(8*n);
byte[] buf = new byte[4];
raf.read(buf);//一次读四个字节并存储。
String name = new String(buf);
int age = raf.readInt();
System.out.println(name+".."+age);
System.out.println("pos:"+raf.getFilePointer());
raf.close();
}
/*
* 读取数据。random.txt 使用RandomAccessFile.
*/
public static void readFile() throws IOException{
RandomAccessFile raf = new RandomAccessFile("random.txt","r");
byte[] buf = new byte[4];
raf.read(buf);//一次读四个字节并存储。
String name = new String(buf);
int age = raf.readInt();
System.out.println(name+".."+age);
raf.close();
}
/*
* 通过RandomAccessFile类创建文件并给文件中写入数据。
* 数据以:姓名+年龄为主的个人信息。
*/
public static void writeFile() throws IOException{
/*
* 创建RandomAccessFile对象时,如果文件不存在则创建,
* 如果文件已存在,则不创建。
*/
RandomAccessFile
raf = new RandomAccessFile("random.txt","rw");
raf.write("张三".getBytes());
raf.writeInt(97);
raf.write("李四".getBytes());
raf.writeInt(99);
raf.close();
}
}
通过seek方法操作指针,可以从这个数组中的任意位置上进行读和写。可以完成对数据
的修改,但是注意:数据必须有规律。
RandomAccessFile raf=new RandomAccessFile(“ran.txt”,”r”)
//调整对象中的指针
raf.seek(8*1)
//跳过指定的字节数
raf.skipBytes(8)
byte[ ] buf=new Byte[4]
raf.read(buf)
String name=new String(buf)
System.out.println(name )
raf.close()
RandomAccessFile raf=new RandomAccessFile(“ran.txt”,”r”)
Raf.seek(8*3)
raf.write(“周期”.getBytes())
raf.writeInt(103)
raf.close()
|