【JAVA IO】_RandomAccessFile笔记

来源:互联网 发布:手机淘宝秒杀怎么刷新 编辑:程序博客网 时间:2024/06/06 18:03

【JAVA IO】_RandomAccessFile笔记

分类: Java
【JAVA IO】_RandomAccessFile笔记

本章目标:
掌握RandomAccessFile类的作用
可以使用RandomAccessFile读取指定位置的数据

RandomAccessFile类的主要功能是完成随机读取功能,可以读取指定位置的内容。

RandomAccessFile是按字节进行读取数据的。要想了解数据类型的字节长度请看这里:

java里面一个字符占几个字节? 
http://blog.csdn.net/e421083458/article/details/8518578

Java中字符串在不同字符编码中所占字节数 
http://blog.csdn.net/e421083458/article/details/8518601




public RandomAccessFile(File file,String mode) throws FileNotFoundException

mode即打开模式:
r:读模式
w:只写
rw:读写,如果使用此模式,如果文件不存在,则会自动创建。

[java] view plaincopyprint?
  1. import java.io.File ;  
  2. import java.io.RandomAccessFile ;  
  3. public class RandomAccessFileDemo01{  
  4.     // 所有的异常直接抛出,程序中不再进行处理  
  5.     public static void main(String args[]) throws Exception{  
  6.         File f = new File("d:" + File.separator + "test.txt") ;    // 指定要操作的文件  
  7.         RandomAccessFile rdf = null ;        // 声明RandomAccessFile类的对象  
  8.         rdf = new RandomAccessFile(f,"rw") ;// 读写模式,如果文件不存在,会自动创建  
  9.         String name = null ;  
  10.         int age = 0 ;  
  11.         name = "zhangsan" ;            // 字符串长度为8  
  12.         age = 30 ;                    // 数字的长度为4  
  13.         rdf.writeBytes(name) ;        // 将姓名写入文件之中  
  14.         rdf.writeInt(age) ;            // 将年龄写入文件之中  
  15.         name = "lisi    " ;            // 字符串长度为8  
  16.         age = 31 ;                    // 数字的长度为4  
  17.         rdf.writeBytes(name) ;        // 将姓名写入文件之中  
  18.         rdf.writeInt(age) ;            // 将年龄写入文件之中  
  19.         name = "wangwu  " ;            // 字符串长度为8  
  20.         age = 32 ;                    // 数字的长度为4  
  21.         rdf.writeBytes(name) ;        // 将姓名写入文件之中  
  22.         rdf.writeInt(age) ;            // 将年龄写入文件之中  
  23.         rdf.close() ;                // 关闭  
  24.     }  
  25. };  


[java] view plaincopyprint?
  1. import java.io.File ;  
  2. import java.io.RandomAccessFile ;  
  3. public class RandomAccessFileDemo02{  
  4.     // 所有的异常直接抛出,程序中不再进行处理  
  5.     public static void main(String args[]) throws Exception{  
  6.         File f = new File("d:" + File.separator + "test.txt") ;    // 指定要操作的文件  
  7.         RandomAccessFile rdf = null ;        // 声明RandomAccessFile类的对象  
  8.         rdf = new RandomAccessFile(f,"r") ;// 以只读的方式打开文件  
  9.         String name = null ;  
  10.         int age = 0 ;  
  11.         byte b[] = new byte[8] ;    // 开辟byte数组  
  12.         // 读取第二个人的信息,意味着要空出第一个人的信息  
  13.         rdf.skipBytes(12) ;        // 跳过第一个人的信息  
  14.         for(int i=0;i<b.length;i++){  
  15.             b[i] = rdf.readByte() ;    // 读取一个字节  
  16.         }  
  17.         name = new String(b) ;    // 将读取出来的byte数组变为字符串  
  18.         age = rdf.readInt() ;    // 读取数字  
  19.         System.out.println("第二个人的信息 --> 姓名:" + name + ";年龄:" + age) ;  
  20.         // 读取第一个人的信息  
  21.         rdf.seek(0) ;    // 指针回到文件的开头  
  22.         for(int i=0;i<b.length;i++){  
  23.             b[i] = rdf.readByte() ;    // 读取一个字节  
  24.         }  
  25.         name = new String(b) ;    // 将读取出来的byte数组变为字符串  
  26.         age = rdf.readInt() ;    // 读取数字  
  27.         System.out.println("第一个人的信息 --> 姓名:" + name + ";年龄:" + age) ;  
  28.         rdf.skipBytes(12) ;    // 空出第二个人的信息  
  29.         for(int i=0;i<b.length;i++){  
  30.             b[i] = rdf.readByte() ;    // 读取一个字节  
  31.         }  
  32.         name = new String(b) ;    // 将读取出来的byte数组变为字符串  
  33.         age = rdf.readInt() ;    // 读取数字  
  34.         System.out.println("第三个人的信息 --> 姓名:" + name + ";年龄:" + age) ;  
  35.         rdf.close() ;                // 关闭  
  36.     }  
  37. };  

总结:

byte b[] = new byte[8] ;    // 开辟byte数组
for(int i=0;i<b.length;i++){
    b[i] = rdf.readByte() ;    // 读取一个字节,因为每次只能读取一个字节
}
name = new String(b) ;        // 将读取出来的byte数组变为字符串
0 0