【文件处理】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 ...
随机推荐
- C语言问题集
征服C指针:P70#include "stdio.h" char *int_to_str(int int_value){ static char buf[20]; sprintf( ...
- 夜色的 cocos2d-x 开发笔记 00
第一次写博客,本人还是大二学生,纯新手,无论是文章的技术性,还是参考性,都不高,但却是根据我的经历,开发过的真实过程,对自己记载一些备忘的笔记,更希望也能帮到一些人. 本人用的win7 + vs201 ...
- python if else while for
1 getpass模块 设置密码不显示明文 用户名和密码输入程序: import getpass username = input("username:") password = ...
- struts2 中使用DMI(动态调用方法)方式配置action
1.使用 "!"方式,即 action名称 ! 方法名称 struts.xml 配置 <package name="user" namespace=&qu ...
- python从字符串中提取数字,使用正则表达式
使用正则表达式 import re D = re.findall(r"\d+\.?\d*",line) print(D) -7.23246 10.8959 5.19534 0.06 ...
- ffmpeg控制台上不能输出信息的解决办法
最近遇到下面类似的问题 我下载了最新版本(1.1.2)版本的ffmpeg,在windows平台下使用msys+mingw编译成功后,我输入命令后,一点输出信息都没有,例如: ffmpeg -v 这时候 ...
- leetcode: 树
1. sum-root-to-leaf-numbers Given a binary tree containing digits from0-9only, each root-to-leaf pat ...
- HTML入门1—HTML基础学习
html文档结构 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...
- vue项目里的日期格式化(摘录)
export function formatDate (date, fmt) { if (/(y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (date. ...
- LA 3902 网络
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...