【文件处理】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]
【文件处理】RandomAccessFile的更多相关文章
- JAVASE02-Unit06: 文件操作——File 、 文件操作—— RandomAccessFile
Unit06: 文件操作--File . 文件操作-- RandomAccessFile java.io.FileFile的每一个实例是用来表示文件系统中的一个文件或目录 package day06; ...
- Java基础-IO流对象之随机访问文件(RandomAccessFile)
Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...
- 文件操作——RandomAccessFile
文件操作——RandomAccessFile 构建RandomAccessFileJava提供了一个可以对文件随机访问的操作,访问包括读和写操作.该类名为RandomAccessFile.该类的读 ...
- Java 文件操作-RandomAccessFile
1. RandomAccessFile Java提供了一个可以对文件随机访问的操作,访问包括读和写操作.该类名为RandomAccessFile.该类的读写是基于指针的操作. 1)文件访问模式 ...
- 随机存取文件流--RandomAccessFile
* RandomAccessFile的使用* 1.RandomAccessFile直接维承于java.Lang.Object类,实现了DataInputDataOutput接口* 2.RandomAc ...
- java:RandomAccessFile随机读取文件内容
RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须是可知的.但是该类仅限于操作文件. ...
- Day01:文件操作(File、RandomAccessFile)
文件操作 JAVA中的 File 类是文件和目录路径名的抽象形式.使用 File 类可以获取文件本身的一些信息,例如文件所在的目录.文件长度.文件读写权限等. 在 Java 中,File 类是 jav ...
- Java使用RandomAccessFile读写文件
目录 转载自:http://blog.csdn.net/akon_vm/article/details/7429245 Java RandomAccessFile RandomAccessFile是用 ...
- Java RandomAccessFile用法
RandomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须 ...
- RAF(RandomAccessFile)类
作用:读取文件 /** * */ package com.io.file; import java.io.File; import java.io.IOException; import java.i ...
随机推荐
- .net 控制器调用外部链接传参方法
public class RequestHelper { /// <summary> /// 发起post请求 /// </summary> /// <typeparam ...
- System Center Configuration Manager 2016 配置安装篇(Part2)
步骤4.安装SCCM当前分支(版本1802) 注意:以管理员身份在ConfigMgr服务器(CM01)上执行以下操作. 为此,在Configuration Manager服务器(CM16)上,打开W ...
- linux上传、下载文件rz、sz命令
1.介绍 sz命令是利用ZModem协议来从linux服务器传送文件到本地,一次可以传送一个或多个文件.相对应的从本地上传文件到Linux服务器,可以使用rz命令. 2.参数说明 -a,以文本方式传输 ...
- 安装国际版firefox(火狐浏览器)并设置语言为中文
访问https://www.mozilla.org/zh-CN/firefox/new/?scene=2下载.安装: 访问https://addons.mozilla.org/zh-CN/firefo ...
- AJAX(三):GET与POST
1.使用场景get是最常见的请求类型,最常用于向服务器查询某些信息仅次于get的是post请求,通常用于向服务器发送应该被保存的数据 2.使用get请求经常会发生一个错误,就是查询字符串的个是有问题, ...
- 【转】Android开发学习总结(一)——搭建最新版本的Android开发环境
最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是一直没有搭建开发环境去学习,Android的更新速度比较快了,Android1. ...
- JS显示上一周
<html> <head> <script> var currDT; var aryDay = new Array("日","一&qu ...
- gearman安装实录
花了5个小时装好了gearman,问题不断,坑爹的服务器yum还坏了,悲催. 服务器系统:centos5.3 64位 gearman版本:1.1.8 安装包(相关依赖)下载 1.gearman安装包 ...
- 2017.9.24 基于HTML+JavaScript+CSS的开发案例&&JavaScript+CSS+DIV实现表格变色
1.JavaScript+CSS+DIV实现下拉菜单 1.1 层标签<div> 基本语法: <div id="层编号" style="position: ...
- 20145238-荆玉茗 《Java程序设计》第一次实验报告
实验一 Java开发环境的熟悉(Linux + Eclipse) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验要求 1.没 ...