【文件处理】RandomAccessFile

一,RandomAccessFile的用途:

使用RandomAccessFile的最大好处在于,一般的InputStream和OutputStream类对于文件都是顺序读取的,不能跳跃读取数据。而RandomAccessFile类可以通过seek或者skipBytes方法来读取数据指针,从而达到任意提取数据的效果。另外还可以通过选择不同数据类型的方式来对数据进行读取或者编写。要强调的是如果文件编写时选择的是UTF-8的方式的话,那么读取也必须是通过读取UTF-8的方式。不然会出现乱码。

二,RandomAccessFile的使用案例:

(1)创建Person类,给3个属性。分别是 name,age,sex (数据类型分别为:String, int ,boolean)

package Entiry;

public class Person {

    public String name;
    public int age;
    public boolean sex;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public boolean isSex() {
        return sex;
    }
    public void setSex(boolean sex) {
        this.sex = sex;
    }
    public Person() {
        super();
        // TODO Auto-generated constructor stub
    }
    public Person(String name, int age, boolean sex) {
        super();
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    @Override
    public String toString() {
        return "Person [age=" + age + ", name=" + name + ", sex=" + sex + "]";
    }

}

(2)创建RandomAccessFile的Test类(方法写到了test类)

package RandomAccess;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.List;

import Entiry.Person;

public class test {

    public static void main(String[] args) throws IOException {
        //创建Person数组
        Person[] persons = new Person[]{new Person("tony", 18, true),
        new Person("Jack", 33, true),new Person("Vivian",23, false)
        };
        write(persons);     //调用write方法
        Person p = read(2);  //调用read方法()中的2是指读取第三行的数据。
        System.out.println(p);

    }
    private static List<Long> pointer;  //创建一个long型的集合。目的是为了存放不同数据(name,age,sex)之间的指针。
    /**  /* 创建read方法(设定指针参数)  /*  **/
    public static Person read(int i) throws IOException{

        RandomAccessFile rand = new RandomAccessFile("C:/Users/IBM_ADMIN/Desktop/NewDirectory/liupeng/randomaccess.txt", "r"); //指定读取文件地址,“r”为只读

        long l = pointer.get(i);
        rand.skipBytes((int)l);  //skipBytes()是指在文件中跳过给定数量的字节

        Person p = new Person();

        p.name = rand.readUTF(); //以UTF的方式读取
        p.age =rand.readInt();   //以int类型读取
        p.sex = rand.readBoolean(); //以布尔类型读取
        rand.close();
        return p;

    }
    /**  /* 创建write方法(把Person[]类作为参数传递过来 persons)  /*  **/  
    public static void write(Person[] persons) throws IOException{
        RandomAccessFile rand = new RandomAccessFile("C:/Users/IBM_ADMIN/Desktop/NewDirectory/liupeng/randomaccess.txt", "rw"); //同样指定读取文件地址,“rw”为读写权限

        pointer = new ArrayList<Long>(); //初始化pointer指针类

        for(Person per:persons){
            pointer.add(rand.getFilePointer()); //把当前指针记录到集合里。
            rand.writeUTF(per.name);  //通过UTF的方式进行写入。
            System.out.println("name" + rand.getFilePointer()); //打印name所在的指针位置。(因为我们集合中有三个元素对。因此每次循环出来的name指针分别是不同的)
            rand.writeInt(per.age);   //通过int方法进行写入。
            System.out.println("age" + rand.getFilePointer()); //打印age所在的指针位置。
            rand.writeBoolean(per.sex); //通过boolean的方法进行写入。
            System.out.println("sex" + rand.getFilePointer()); //打印sex所在的指针位置。

        }rand.close();
    }

}

(3)结果:

注释:数字分别为每次循环后记录的指针位置,而最后Person [age=23, name=Vivian, sex=false]是 代码中Person p = read(2);  指定的第三个元素的结果。因为第一个元素是从0开始起始的。

name6
age10
sex11
name17
age21
sex22
name30
age34
sex35
Person [age=23, name=Vivian, sex=false]
 
时间: 2024-11-02 11:53:59

【文件处理】RandomAccessFile的相关文章

文件操作——RandomAccessFile

  文件操作——RandomAccessFile 构建RandomAccessFileJava提供了一个可以对文件随机访问的操作,访问包括读和写操作.该类名为RandomAccessFile.该类的读写是基于指针的操作.1. 只读模式 RandomAccessFile在对文件进行随机访问操作时有两个模式,分别为只读模式(只读取文件数据),和读写模式(对文件数据进行读写).只读模式:在创建RandomAccessFile时,其提供的构造方法要求我们传入访问模式:RandomAccessFile(F

Java 文件操作-RandomAccessFile

1. RandomAccessFile Java提供了一个可以对文件随机访问的操作,访问包括读和写操作.该类名为RandomAccessFile.该类的读写是基于指针的操作. 1)文件访问模式 RandomAccessFile在堆文件进行随机访问操作时有两个模式,分为只读模式(只读取文件数据),和读写模式(对文件数据进行读写). 在创建RandomAccessFile时,其提供的构造方法要求我们传入访问模式: RandomAccessFile(File file,String mode) Ran

Java核心类库-IO-随机访问文件(RandomAccessFile)

随机访问文件:表示可以在该文件任何位置读取数据. public class RandomAccessFileDemo { public static void main(String[] args) throws Exception { File f = new File("raf.txt"); //write(f); read(f); } private static void read(File f) throws Exception { //r表示只读 RandomAccessF

【幻化万千戏红尘】qianfengDay20-java基础学习:数据流、随机读取文件流RandomAccessFile

课程回顾: 流:转换流:字符和字节的转换对象流(Object):序列化,反序列化 打印流(Print):打印各种数据类型的数据 今日内容:数据流(Data):支持将基本数据类型写出,字节流,处理流1.DataOutputStream:数据输出字节流常用方法:writeXXX:写出基本数据类型的数据writeUTF:写出字符串2.DataInputStream:数据输入字节流常用方法:readXXX:读取基本数据类型的数据readUTF:读取字符串 随机读取文件类:拥有写出和读取基本数据类型的方法

随机访问文件RandomAccessFile 与 内存映射文件MappedByteBuffer

一.RandomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须是可知的.但是该类仅限于操作文件. RandomAccessFile不属于InputStream和OutputStream类系的.实际上,除了实现DataInput和DataOutput接口之外(DataInputStream和DataOutputStream也实现了这两个接口),它和这两个类系

用RandomAccessFile来读写文件

RandomAccessFile类,即可以读取文件,也可以写入文件,功能比较强大,这种读取/写入通过一个参数控制. 通过RandomAccessFile类的方法,可以设置和测定文件指针的位置,因此可以在文件的各种位置读取或写入文件. 案例如下: 读取file81.txt中的内容,并把它写入到fie82.txt中.注意,在file82.txt中只能添加新内容,不能覆盖原有的内容. package cn.unit12.file; import java.io.RandomAccessFile; pu

随机读写文件RandomAccessFile

RandomAccessFile类用于随机访问文件,自身具备读和写的方法,通过skipBytes(int x),seek(int x)方法来达到随机访问的目的. RandomAccessFile类的实例支持对随机访问文件的读取和写入. 随机访问文件的行为类似于存储在文件系统中的一个大型byte数组.存在指向隐函数组的光标或索引,称为文件指针. 该类不算是IO体系中的子类,因为该类直接继承自Object类,但是它是IO包中的成员,因为它具备读和写的功能.在内部封装了一个数组,而且通过指针对数组的元

[Java开发之路](7)RandomAccessFile类详解

RandomAccessFile适用于大小已知的记录组成的文件,提供的对文件访问,既可以读文件,也可以写文件,并且支持随机访问文件,可以访问文件的任意位置.文件中记录的大小不一定都相同,只要我们知道记录的大小和位置.但是该类仅限于操作文件. RandomAccessFile不属于InputStream和OutputStream继承层次结构中的一部分.除了实现DataInput和DataOutput接口之外(DataInputStream和DataOutputStream也实现了这两个接口),它和

File操作-RandomAccessFile

一.知识点笔记 1. 文件操作——RandomAccessFile 1. 创建对象 Java提供了一个可以对文件随机访问的操作,访问包括读和写操作.该类名为RandomAccessFile.该类的读写是基于指针的操作. 1.1.2. 只读模式 RandomAccessFile在对文件进行随机访问操作时有两个模式,分别为只读模式(只读取文件数据),和读写模式(对文件数据进行读写). 只读模式: 在创建RandomAccessFile时,其提供的构造方法要求我们传入访问模式: RandomAcces

(转) Java RandomAccessFile与MappedByteBuffer

RandomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须是可知的.但是该类仅限于操作文件. RandomAccessFile不属于InputStream和OutputStream类系的.实际上,除了实现DataInput和DataOutput接口之外(DataInputStream和DataOutputStream也实现了这两个接口),它和这两个类系毫不