RandomAccessFile类的使用,随机读写文件。

RandomAccessFile类的使用,随机读写文件。

此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。

import java.io.*;
public class RandomAccessFileDemo01{
	public static void main(String[] args)throws Exception{          //判断是否是目录
		File f = new File("d:"+File.separator+"test.txt");          //在创建文件是,使用File.separator读取系统默认的目录格式,有很好的移植性。
		RandomAccessFile raf = null;
		raf = new RandomAccessFile(f,"rw");     //读写模式,如果文件不存在,则创建
		String name=null;
		int age = 0;
		name = "zhangsan";
		age=30;
		raf.writeBytes(name);             //写入文件中
		raf.writeInt(age); 
		name = "lisi    ";
		age=30;
		raf.writeBytes(name);             //写入文件中
		raf.writeInt(age); 
		name = "wangwu  ";
		age=30;
		raf.writeBytes(name);             //写入文件中
		raf.writeInt(age); 
		raf.close();					 //关闭
		System.out.println("写入成功!");
	}
}


写入成功后来进行随机读取,用户可以自己操作想要先读的数据。

/*
writeByte一次写8个字节,writeInt一次写4个字节,所以读也是。
String(byte[] bytes) 通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
学习了File后进一步学习RandomAccessFile来向文件中写入读出。
*/
import java.io.*;
public class RandomAccessFileDemo02{
	public static void main(String[] args)throws Exception{          //判断是否是目录
		File f = new File("d:"+File.separator+"test.txt");           //在创建文件是,使用File.separator读取系统默认的目录格式,有很好的移植性。
		RandomAccessFile raf = null;   
		raf = new RandomAccessFile(f,"r");                           //读模式
		String name=null;
		int age = 0;
		byte[] b = new byte[8];
		raf.skipBytes(12);                                           //跳过12个字节,也就是第一个人的信息                                        
		for(int i=0;i<b.length;i++){
			b[i]=raf.readByte();
		}
		name = new String(b);                                       //将读出的字节转化成字符串String中的方法
		age = raf.readInt();
		System.out.println("第二个人的信息--->姓名:"+name+"年龄:"+age);
		//读取第一个人的信息
		raf.seek(0);                                                //指针回到文件的开头                               
		for(int i=0;i<b.length;i++){
			b[i]=raf.readByte();
		}
		name = new String(b);                                       //将读出的字节转化成字符串String中的方法
		age = raf.readInt();
		System.out.println("第一个人的信息--->姓名:"+name+"年龄:"+age);
		//读取第三个人的信息
		raf.skipBytes(12);                                           //跳过12个字节,跳过第二个人的信息,因为读完了第一个人raf指向在了第二个人的头                                     
		for(int i=0;i<b.length;i++){
			b[i]=raf.readByte();
		}
		name = new String(b);                                       //将读出的字节转化成字符串String中的方法
		age = raf.readInt();
		System.out.println("第三个人的信息--->姓名:"+name+"年龄:"+age);
		
	}
}

主要注意头注释里面的内容。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值