(Java)RandomAccessFile 类

自闭症网瘾萝莉.ら 提交于 2020-02-08 04:50:27

File 类只是针对文件本身进行操作,而如果要对文件内容进行操作,则可以使用 RandomAccessFile 类,此类属于随机读取类,可以随机读取一个文件中指定位置的数据

一、RandomAccessFile 类的常用操作方法

在这里插入图片描述
如果使用 rw 方式声明 RandomAccessFile 对象时,要写入的文件不存在,系统将自动进行创建

import java.io.File;
import java.io.RandomAccessFile;

public class Root{
    //直接抛出异常,程序中不再处理
    public static void main(String[] args) throws Exception {
        File f = new File("D:" + File.separator + "test.txt");//指定要操作的文件
        RandomAccessFile rdf = null;//声明一个 RandomAccessFile 类对象
        rdf = new RandomAccessFile(f,"rw");//以读写方式打开文件,会自动创建新文件夹
        String name = null;
        int age = 0;
        name = "str1";
        age = 30;
        rdf.writeBytes(name);//将姓名写入文件之中
        rdf.writeInt(age);//将年龄写入文件之中
        name = "str2";
        age = 31;
        rdf.writeBytes(name);//将姓名写入文件之中
        rdf.writeInt(age);//将年龄写入文件之中
        rdf.close();//关闭文件
    }
}

这里的年龄是按照整型格式写入的, 所以直接打开文件时不可见的

二、使用RandomAccessFile类写入数据

读取时直接使用 r 的模式即可,以只读的方式打开文件
读取时所有的字符串只能按照 byte 数组的方式读取出来,而且所有的长度是 8 位。

import java.io.File;
import java.io.RandomAccessFile;

public class Test{
    public static void main(String[] args) throws Exception{
        File f = new File("D:" + File.separator + "test.txt");
        RandomAccessFile rdf = null;
        rdf = new RandomAccessFile(f,"r");//以度方式打开文件,会自动创建新文件
        String name = null;
        int age = 0;
        byte b[] = new byte[8];//准备空间读取姓名
        rdf.skipBytes(12);
        for (int i=0;i<b.length;i++){
            b[i] = rdf.readByte();//循环读取出前8个内容
        }
        name = new String(b);//将读取出来的byte数组变为 String
        age = rdf.readInt();//读取数字
        System.out.println("第二个人信息 --> 姓名:" + name + ";年龄:" + age);
        rdf.seek(0);//指针回到文件的开头
        b = new byte[8];//准备空间读取姓名
        for (int i=0;i<b.length;i++){
            b[i] = rdf.readByte();//循环读取出前8个内容
        }
        name = new String(b);//将读取出来的 byte 数组变为 String
        age = rdf.readInt();//读取数字
        System.out.println("第一个人信息 --> 姓名:" + name + ";年龄:" + age);
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!