/*
RandomAccessFile:随机访问文件,不是IO体系中的子类,它直接继承自Object,
但它是IO包中的成员,同时具备读写功能,它同时完成读写的原理是其内部
封装了字节输入流、输出流。其内部封装了一个大型的字节数组,并且通过
指针对数组的元素进行操作,由于指针的存在,通过操作指针可以在文件的
任意位置上对数据进行读取、写入、修改等操作,也可以完成文件的分段录
入,实际应用:多线程下载。局限性:该类智能操作文件。对文件的读写操
作主要有两种模式:只读模式(r):不创建文件,会读取一个指定的已存在
的文件,若文件不存在,则会出现异常;读写模式(rw):要操作的文件不
存在,会自动创建,存在则不覆盖。
方法:getFilePointer:获取指针位置
seek:改变指针位置(数据最好有序、有规律)
skipBytes:跳过指定的字节数
*/
package io;
import java.io.*;
class RandomAccessFile1
{
public static void main(String[] args) throws IOException
{
//write();
read();
//RandomAccessFile raf = new RandomAccessFile("Ryan1.txt","r"); //只读模式下无文件会出现异常
}
public static void read() throws IOException
{
RandomAccessFile raf = new RandomAccessFile("Ryan.txt","r");
//raf.seek(8*1); //指针要先于文件读取设置
raf.skipBytes(8); //跳过指定的字节数,这能向后跳,不能向前
byte[] buf = new byte[4];
raf.read(buf);
String name = new String(buf);
int age = raf.readInt();
sop("name:"+name);
sop("age="+age);
raf.close();
}
public static void write() throws IOException
{
RandomAccessFile raf = new RandomAccessFile("Ryan.txt","rw");
raf.write("Jack".getBytes());
raf.writeInt(16);
raf.write("Ryan".getBytes());
raf.writeInt(55);
raf.seek(8*3);
raf.write("Gill".getBytes());
raf.writeInt(36);
raf.close();
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
|
|