日期:2014-05-16 浏览次数:21105 次
import java.io.RandomAccessFile; public class RandomFileTest { /* *RandomAccessFile类提供了众多的文件访问方法 支持“随即访问”方法 *并且对读写等长记录格式的文件时有很大的优势 *但是此类仅限于操作文件,不能访问其他的io设备,如网络,内存映像等 *构造函数 new RandomAccessFile(f,“rw”)读写方式 *构造函数 new RandomAccessFile(f,“r”)只读方式 *本程序目的是往文件中写入三名员工信息,每位员工还有姓名和年龄字段,、 *然后按照第二名、第一名 、第三名顺序读出员工信息 */ public static void main(String[] args) throws Exception { Employee e = new Employee("zhangsan",18);//第一名员工信息 Employee e1 = new Employee("lisi",28);//第二名 Employee e2 = new Employee("wangwu",23);//第三名 RandomAccessFile raf = new RandomAccessFile("employee.txt","rw"); //把员工的信息以读写的方式存入到某个文件当中 raf.write(e.name.getBytes()); //以字节的形式保存到文件当中 raf.write(e.age); //使用这个方法的时候 当年龄值的范围大于一个字节的话 读取其中的一个字节 剩余的被丢弃 //raf.writeInt(e.age); //使用这个方法的时候 把里面的四个字节全部读出来 raf.write(e1.name.getBytes()); raf.write(e1.age); //raf.writeInt(e1.age); raf.write(e2.name.getBytes()); raf.write(e2.age); //raf.writeInt(e2.age); raf.close(); byte buf[] = new byte[8]; int len = 0; String strName = null; RandomAccessFile ra = new RandomAccessFile("employee.txt","r"); //从文件中读出第二个员工的信息 需要跳过9个字节 因为每个员工的信息占9字节 ra.skipBytes(9); //跳过9个字节 员工姓名占8个字节 年龄占1个字节 //如果上面用raf.writeInt(e.age);的方法存储年龄的话 此处应为ra.skipBytes(12); 因为员工姓名占8个字节 年龄占4个字节 需跳转12字节 len = ra.read(buf); strName = new String(buf,0,len); //字节数组转换成字符串 从而取出员工的姓名 System.out.println(strName.trim()+ ":"+ra.read()); //去掉字符串中不可见的字符 即空格 //下面读取第一个员工的信息 ra.seek(0);//绝对定位 让指示器跳到文件的开始处 len = ra.read(buf); strName = new String(buf,0,len); System.out.println(strName.trim()+ ":"+ra.read()); //以下读取到第三个员工的信息 ra.skipBytes(9); //由于读取完第一个员工的信息后 指示器指在第二个员工信息处 需跳转9个字节开始取第三个员工信息 len = ra.read(buf); strName = new String(buf,0,len); System.out.println(strName.trim()+ ":"+ra.read()); ra.close(); } } public class Employee { //Employee 类定义员工的基本信息 并对员工的姓名做简单的判断 public String name = null; public int age = 0; public static final int LEN = 8; // LEN 规定员工的姓名为8个字符 public Employee(String name,int age) { if(name.length()>LEN){ name = name.substring(0,7); //员工的姓名多余8个字符的时候 把后边的给去掉 }else{ while(name.length()<LEN){ name +="\u0000"; } //如果不够8个的话 就用空补足8个字符 } this.name = name ; //如果是八个字符的话 直接赋值 this.age = age; } }
import java.io.RandomAccessFile; public class RandomFileTest { /* *RandomAccessFile类提供了众多的文件访问方法 支持“随即访问”方法 *并且对读写等长记录格式的文件时有很大的优势 *但是此类仅限于操作文件,不能访问其他的io设备,如网络,内存映像等 *构造函数 new RandomAccessFile(f,“rw”)读写方式 *构造函数 new RandomAccessFile(f,“r”)只读方式 *本程序目的是往文件中写入三名员工信息,每位员工还有姓名和年龄字段,、 *然后按照第二名、第一名 、第三名顺序读出员工信息 * */ public static void main(String[] args) throws Exception { Employee e = new Employee("first",18);//第一名员工信息 Employee e1 = new Employee("第二名",28);//第二名 Employee e2 = new Employee("第三名",24);//第三名 RandomAccessFile raf = new RandomAccessFile("employee.txt","rw"); //把员工的信息以读写的方式存入到某个文件当中 //raf.write(e.name.getBytes()); //以字节的形式保存到文件当中 //用字节的方式写入的时候 当员工的姓名是汉字的时候会出现错误 因为在java 中不管是中文字符还是英文字符 它们都是一个字符 都占用两个字节 在本地的计算机编码系统中英文字符占用一个字节 而中文字符占用两个字节 raf.writeChars(e.name); //此时我们用writeChars写入8个字符 每个字符采用的都是unicode编码每个字符占用两个字节 //raf.write(e.age); //使用这个方法的时候 当年龄值超过了一个字节的范围的话 只写入一个字节内容 剩余的被丢弃 raf.writeInt(e.age); //使用这个方法的时候 把里面的四个字节数据全部写入文件中 //raf.write(e1.name.getBytes()); raf.writeChars(e1.name); //raf.write(e1.age); raf.writeInt(e1.age); //raf.write(e2.name.getBytes()); raf.writeChars(e2.name); //raf.write(e2.age); raf.writeInt(e2.age); raf.close(); //byte buf[] = new byte[8]; //byte []buf = new byte[Employee.LEN]; //int len = 0; String strName = ""; //空对象 RandomAccessFile ra = new RandomAccessFile("employee.txt","r"); //从文件中读出第二个员工的信息 需要跳过9