java RandomAccessFile 类

RandomAccessFile 类

是Java语言中功能最为丰富的文件访问类,它提供了众多的文件访问方法。RandomAccessFile 类支持“随机访问”方式,可以跳转到文件的任意位置处读写数据。在要访问一个文件的时候,不想把文件从头读到尾,而是希望像访问一个数据库一样地访问一个文本文件,这时,使用RandomAccessFile类就是最佳选择。

RandomAccessFile 对象类有个位置指示器,指向当前读写处的位置,当读写n个字节后,文件指示器将指向这n个字节后的下一个字节处。刚打开文件时,文件指示器指向文件的开头处,可以移动文件指示器到新的位置,随后的读写操作将从新的位置开始。RandomAccessFile在数据等长记录格式文件的随机(相对顺序而言)读取时有很大的优势,但该类仅限于操作文件,不能访问其它的IO 设备,如网络、内存映像等。

以读写的方式打开一个文件时,如果文件不存在,程序会自动创建此文件。

RandomAccessFile类中的常用方法:
                                
  void close();             关闭此随机访问文件流并释放与该流关联的所有系统资源。           
  long getFilePointer();   返回此文件中的当前偏移量。                        
  long length();           返回此文件的长度。                            
  read函数集                   从文件读                                 
  void seek(long pos);     设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。
  int skipBytes(int n)     尝试跳过输入的 n 个字节以丢弃跳过的字节。               
  write函数集                 往文件写                                 
  setLength(long newLength) 设置文件大小(设置临时文件)                       

 RandomAccessFile 类的构造方法

1. new RandomAccessFile(f, "rw"); // 读写方式
2. new RandomAccessFile(f, "r");   // 只读方式

向文件中记忆写入数据

	File file = new File("accessFile");
    	RandomAccessFile raf = new RandomAccessFile(file, "rw");  
    	  // 以下向 raf 文件中写数据  
    	raf.writeInt(20);// 占4个字节
    	raf.writeDouble(8.236598);// 占8个字节  
    	raf.writeShort(395);// 占2个字节  
    	raf.writeUTF("这是一个UTF字符串");// 这个长度写在当前字符串指针的前两个字节处,可用readShort()读取  
    	raf.writeBoolean(true);// 占1个字节  
    	raf.writeLong(2325451l);// 占8个字节  
    	raf.writeUTF("又是一个UTF字符串哈哈");  
    	raf.writeFloat(35.5f);// 占4个字节  
    	raf.writeChar('a');// 占2个字节  
    	raf.close();

从文件中读取随机记忆的文件内容

    	File file = new File("accessFile");
    	RandomAccessFile raf = new RandomAccessFile(file, "rw");
    	System.out.println(raf.readInt());//读取Int数据,指针会往后移动4字节
    	System.out.println(raf.readDouble());//读取Double数据,指针会往后移动8字节
    	System.out.println(raf.readUTF());//读取字符串,指针会移到该字符串后
    	raf.skipBytes(3);//跳过3个字节,也就是跳过上面例子的 boolen 和 short 值。
    	System.out.println(raf.readLong());//读取long值
    	short readShort = raf.readShort();//读取字符串的长度
    	System.out.println("目前指针处的字符串长度为=" + readShort);
    	raf.skipBytes(readShort);//跳过该字符串
    	System.out.println(raf.readFloat());//读取float值
    	System.out.println(raf.readChar());//读取char值
    
    	//long length = raf.length();
    	//System.out.println("文件的总字节数为:"+length);
    
    	//long filePointer = raf.getFilePointer();//当前指针的位置,定位到哪个字节了。
    	//System.out.println("目前字节指针定位在:"+filePointer);
    
    	//raf.seek(4);//直接定位到第4个字节处。
    	


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值