一,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]
 

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

  1. JAVASE02-Unit06: 文件操作——File 、 文件操作—— RandomAccessFile

    Unit06: 文件操作--File . 文件操作-- RandomAccessFile java.io.FileFile的每一个实例是用来表示文件系统中的一个文件或目录 package day06; ...

  2. Java基础-IO流对象之随机访问文件(RandomAccessFile)

    Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...

  3. 文件操作——RandomAccessFile

      文件操作——RandomAccessFile 构建RandomAccessFileJava提供了一个可以对文件随机访问的操作,访问包括读和写操作.该类名为RandomAccessFile.该类的读 ...

  4. Java 文件操作-RandomAccessFile

    1. RandomAccessFile     Java提供了一个可以对文件随机访问的操作,访问包括读和写操作.该类名为RandomAccessFile.该类的读写是基于指针的操作. 1)文件访问模式 ...

  5. 随机存取文件流--RandomAccessFile

    * RandomAccessFile的使用* 1.RandomAccessFile直接维承于java.Lang.Object类,实现了DataInputDataOutput接口* 2.RandomAc ...

  6. java:RandomAccessFile随机读取文件内容

    RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须是可知的.但是该类仅限于操作文件. ...

  7. Day01:文件操作(File、RandomAccessFile)

    文件操作 JAVA中的 File 类是文件和目录路径名的抽象形式.使用 File 类可以获取文件本身的一些信息,例如文件所在的目录.文件长度.文件读写权限等. 在 Java 中,File 类是 jav ...

  8. Java使用RandomAccessFile读写文件

    目录 转载自:http://blog.csdn.net/akon_vm/article/details/7429245 Java RandomAccessFile RandomAccessFile是用 ...

  9. Java RandomAccessFile用法

    RandomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须 ...

  10. RAF(RandomAccessFile)类

    作用:读取文件 /** * */ package com.io.file; import java.io.File; import java.io.IOException; import java.i ...

随机推荐

  1. RESTful API设计基本原则

    REST四个基本原则:1.使用HTTP动词:GET POST PUT DELETE:2.无状态连接,服务器端不应保存过多上下文状态,即每个请求都是独立的:3.为每个资源设置URI:4.通过XML JS ...

  2. Design Pattern ->Bridge

    Layering & Contract Philosophy With additional indirection. class CWindowImp { public: virtual v ...

  3. (C# 基础) 静态字段,静态类,静态方法。

    静态字段被类的所有实例所共享,即此类的所有实例都访问同一内存地址. 所以该内存位置的值变更的话,这种变更对所有的实例都可见. class MyClass { ; ; public void SetVa ...

  4. ComponentOne、Spread、ActiveReports 5折起 加入惊喜惠

    慧都十周年,GrapeCity也来共襄盛举,旗下三大产品产品线齐齐参与.界面控件套包ComponentOne.Excel表格控件Spread与报表开发工具ActiveReports,指定授权5折起加入 ...

  5. Struts2_用DomainModel接收参数

    用域模型接收参数 User类 package com.bjsxt.struts2.user.model; public class User { private String name; privat ...

  6. 新版mysql 5.7的group_by非常不和谐

    sqlalchemy.exc.OperationalError OperationalError: (_mysql_exceptions.OperationalError) (1055, " ...

  7. 笨办法学Python(十八)

    习题 18: 命名.变量.代码.函数 标题包含的内容够多的吧?接下来我要教你“函数(function)”了!咚咚锵!说到函数,不一样的人会对它有不一样的理解和使用方法,不过我只会教你现在能用到的最简单 ...

  8. Html + JS : 点击对应的按钮,进行选择是隐藏还是显示(用户回复功能)

    例如: 当我点击按钮1时,点击第一下进行显示This is comment 01,点击第二下隐藏This is comment 01 当我点击按钮2时,点击第一下进行显示This is comment ...

  9. 修改Windows下的Memcached下的服务端口

    在命令模式下,可以使用 memcached -p 12000 去指定端口,可服务安装后,却总是只有 -d runservice 的参数. 通过修改注册表来达到这个修改端口的目的. 在 HKEY_LOC ...

  10. 1.06 在WHERE子句中引用取别名的列

    如下查询,会抛出错误: mysql> select sal as salary, comm as commission from emp where salary < 5000;ERROR ...