本帖最后由 缘木求鱼 于 2012-10-11 20:29 编辑
- //RandomAccessFileDemo?!.java
- /**
- * 一个员工信息就是文件中的一条记录,
- * 而且必须保证每条记录在文件中的大小相同,也就是每个员工的姓名字段在文件中的
- * 长度是一样的,
- * 这样才能够准确定位每条记录在文件中的具体位置。
- * 假设 name 中有 8
- * 个字符,少于 8 个则补空格(这里用"\u0000"),多于 8 个则去掉后面多余的部分。由于
- * 年龄是整型数,不管这个数有多大,只要它不超过整型数的范围,在内存中都是占 4
- * 个字节大小。
- */
- import java.io.*;
- public class RandomAccessFileDemo{
- public static void main(String[] args)throws Exception{
- Employee e1=new Employee("zhang",25);
- Employee e2=new Employee("lisii",29);
- Employee e3=new Employee("wangw",30);
- RandomAccessFile ra=new RandomAccessFile("ra","rw");//打开一个文件以写入数据
- ra.write(e1.name.getBytes());
- ra.writeInt(e1.age);
- ra.write(e2.name.getBytes());
- ra.writeInt(e2.age);
- ra.write(e3.name.getBytes());
- ra.writeInt(e3.age);
- ra.close();
- RandomAccessFile raf =new RandomAccessFile("ra","r");//打开一个文件以读取数据
- int len=8;
- raf.skipBytes(12);// 跳过第一个员工的信息,其姓名 8 字节,年龄 4 字节
- System.out.println("第二个员工信息:");
- String str="";
- for(int i=0;i<len;i++)
- str=str+(char)raf.readByte();
- System.out.println("name:"+str);
- System.out.println("age:"+raf.readInt());
- System.out.println("第一个员工信息:");
- raf.seek(0);// 将文件指针移动到文件开始位置?//只是将文件指针指向开头
- str="";
- for(int i=0;i<len;i++)
- str=str+(char)raf.readByte();
- System.out.println("name:"+str);
- System.out.println("age:"+raf.readInt());
- System.out.println("第三个员工信息:");
- raf.skipBytes(12);// 跳过第二个员工信息?,承接上次skipBytes的量,向左移
- str="";
- for(int i=0;i<len;i++)
- str=str+(char)raf.readByte();
- System.out.println("name:"+str.trim());//此字符串移除了前导和尾部空白的副本;如果没有前导和尾部空白,则返回此字符串
- System.out.println("age:"+raf.readInt());
- raf.close();
- }
- }
- class Employee{
- String name;
- int age;
- final static int LEN=8;
- public Employee(String name,int age){
- if(name.length()>LEN){
- name=name.substring(0,8);
- }
- else
- {
- while(name.length()<LEN)
- name=name+"\u0008";
- }
- this.name=name;
- this.age=age;
- }
- }
- 我的上个问题没人解决,就来新问题了,大家看:
- --这是JAVA源程序所有内容。
- 解释下28、36、43三个语句的原理。
- 谢谢了
复制代码 |