【文件处理】RandomAccessFile
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【文件处理】RandomAccessFile,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3804字,纯文字阅读大概需要6分钟。
内容图文
使用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
标签:bool int() 之间 指定 案例 min not 类型 static
本文系统来源:http://www.cnblogs.com/liupengpengg/p/6845467.html
内容总结
以上是互联网集市为您收集整理的【文件处理】RandomAccessFile全部内容,希望文章能够帮你解决【文件处理】RandomAccessFile所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。