一,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. 【起航计划 019】2015 起航计划 Android APIDemo的魔鬼步伐 18 App->Device Admin 设备管理器 DeviceAdminReceiver DevicePolicyManager PreferenceActivity的使用

    Device Admin示例介绍了类DeviceAdminReceiver,DevicePolicyManager和ActivityManager. 使用DevicePolicyManager这个类, ...

  2. Oracle 数据库自动备份方案

    1.新建 backup.bat脚本 @echo off echo ================================================ echo Windows环境下Ora ...

  3. [RDLC]心得整理(一)

    2014年在做项目的时候, 过用过RDLC, 之后便在没有使用过了. 最近又有项目使用rdlc, 感觉有些陌生,然后重新阅读了以前的笔记,想做一下整理. 常见问题: 1. 为什么rdlc报表出来的pd ...

  4. 如何将centos7自带的firewall防火墙更换为iptables防火墙

    用惯了centos6的iptables防火墙,对firewall太无感了,那么如何改回原来熟悉的iptables防火墙呢? 1.关闭firewall防火墙 [root@centos7 html]# s ...

  5. *459. Repeated Substring Pattern (O(n^2)) two pointers could be better?

    Given a non-empty string check if it can be constructed by taking a substring of it and appending mu ...

  6. 爬虫第一篇基本库的使用——urllib

    在Python2中有urllib2和urllib3两个库来实现请求的发送,在Pyhon3中则统一为urllib. urilib包含以下4个模块 request:最基本的请求模块,可以用来实现请求的发送 ...

  7. QT5中两个窗体之间传递信息(值)

    一个窗体A调用另一个窗体B: 1)包含窗体B的头文件#include"B.h" 2)在窗体A中增加slots函数: public slots: void infoRecv(QStr ...

  8. IOS 拉伸图片(封装)

    /** * 根据图片名返回一张能够自由拉伸的图片 */ +(UIImage *)resizedImage:(NSString *)name { UIImage *image=[UIImage imag ...

  9. 页面文本超出后CSS实现隐藏的方法

    text-overflow: ellipsis !important; white-space: nowrap !important; overflow: hidden !important; dis ...

  10. robotframework实战一

    1.环境 1.Robotframework 安装环境,见以下帖子,只要保证python安装成功,安装了python的pip,就可以使用pip一路安装下去了.以下帖子也有基础的操作,帖子路径 http: ...