RandomAccessFile为“随机读取类”

public RandomAccessFile(File file,
                        String mode)
                 throws FileNotFoundException
建立从中读取和向其中写入(可选)的随机访问文件流,该文件由 File 参数指定。将建立一个新的 FileDescriptor 对象来表示此文件的链接。
mode 参数指定用以打开文件的访问模式。容许的值及其含意为:
含意
"r" 以只读方式打开。调用结果对象的任何 write 方法都将致使抛出 IOException
"rw" 打开以便读取和写入。若是该文件尚不存在,则尝试建立该文件。
"rws" 打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每一个更新都同步写入到底层存储设备。
"rwd" 打开以便读取和写入,对于 "rw",还要求对文件内容的每一个更新都同步写入到底层存储设备。
"rws""rwd" 模式的工做方式极其相似
FileChannel 类的 force(boolean) 方法,分别传递 truefalse 参数,除非它们始终应用于每一个 I/O 操做,并所以一般更为高效。若是该文件位于本地存储设备上,那么当返回此类的一个方法的调用时,能够保证由该调用对此文件所作的全部更改均被写入该设备。这对确保在系统崩溃时不会丢失重要信息特别有用。若是该文件不在本地设备上,则没法提供这样的保证。
"rwd" 模式可用于减小执行的 I/O 操做数量。使用 "rwd" 仅要求更新要写入存储的文件的内容;使用 "rws" 要求更新要写入的文件内容及其元数据,这一般要求至少一个以上的低级别 I/O 操做。
若是存在安全管理器,则使用 file 参数的路径名做为其参数调用它的 checkRead 方法,以查看是否容许对该文件进行读取访问。若是该模式容许写入,那么还使用该路径参数调用该安全管理器的 checkWrite 方法,以查看是否容许对该文件进行写入访问。
代码1----写操做
import java.io.File ;
import java.io.RandomAccessFile ;
public class RandomAccessFileDemo01{
   // 全部的异常直接抛出,程序中再也不进行处理
   public static void main(String args[]) throws Exception{
    File f = new File( "d:" + File.separator + "test.txt") ;   // 指定要操做的文件
    RandomAccessFile rdf = null ;     // 声明RandomAccessFile类的对象
    rdf = new RandomAccessFile(f, "rw") ; // 读写模式,若是文件不存在,会自动建立
    String name = null ;
     int age = 0 ;
    name = "zhangsan" ;       // 字符串长度为8
    age = 30 ;           // 数字的长度为4
    rdf.writeBytes(name) ;     // 将姓名写入文件之中
    rdf.writeInt(age) ;       // 将年龄写入文件之中
    name = "lisi        " ;       // 字符串长度为8
    age = 31 ;           // 数字的长度为4
    rdf.writeBytes(name) ;     // 将姓名写入文件之中
    rdf.writeInt(age) ;       // 将年龄写入文件之中
    name = "wangwu    " ;       // 字符串长度为8
    age = 32 ;           // 数字的长度为4
    rdf.writeBytes(name) ;     // 将姓名写入文件之中
    rdf.writeInt(age) ;       // 将年龄写入文件之中
    rdf.close() ;         // 关闭
  }
};
代码2------读操做
 
import java.io.File ;
import java.io.RandomAccessFile ;
public class RandomAccessFileDemo02{
   // 全部的异常直接抛出,程序中再也不进行处理
   public static void main(String args[]) throws Exception{
    File f = new File( "d:" + File.separator + "test.txt") ;   // 指定要操做的文件
    RandomAccessFile rdf = null ;     // 声明RandomAccessFile类的对象
    rdf = new RandomAccessFile(f, "r") ; // 以只读的方式打开文件
    String name = null ;
     int age = 0 ;
     byte b[] = new byte[8] ;   // 开辟byte数组
     // 读取第二我的的信息,意味着要空出第一我的的信息
    rdf.skipBytes(12) ;     // 跳过第一我的的信息
     for( int i=0;i<b.length;i++){
      b[i] = rdf.readByte() ;   // 读取一个字节
    }
    name = new String(b) ;   // 将读取出来的byte数组变为字符串
    age = rdf.readInt() ;   // 读取数字
    System.out.println( "第二我的的信息 --> 姓名:" + name + ";年龄:" + age) ;
     // 读取第一我的的信息
    rdf.seek(0) ;   // 指针回到文件的开头
     for( int i=0;i<b.length;i++){
      b[i] = rdf.readByte() ;   // 读取一个字节
    }
    name = new String(b) ;   // 将读取出来的byte数组变为字符串
    age = rdf.readInt() ;   // 读取数字
    System.out.println( "第一我的的信息 --> 姓名:" + name + ";年龄:" + age) ;
    rdf.skipBytes(12) ;   // 空出第二我的的信息
     for( int i=0;i<b.length;i++){
      b[i] = rdf.readByte() ;   // 读取一个字节
    }
    name = new String(b) ;   // 将读取出来的byte数组变为字符串
    age = rdf.readInt() ;   // 读取数字
    System.out.println( "第三我的的信息 --> 姓名:" + name + ";年龄:" + age) ;
    rdf.close() ;         // 关闭   } };
相关文章
相关标签/搜索