I/O编程-File类和RandomAccessFile类

File类,可以创建文件(包括各种格式)、删除文件;

		File file=new File("D:\\workspace\\Test\\1.pdf");
		if(file.exists())//文件是否存在
			file.delete();
		else file.createNewFile();
		System.out.println("filename:"+file.getName());
		System.out.println("filepath:"+file.getPath());
		System.out.println("fileabspath:"+file.getAbsolutePath());//绝对路径
		System.out.println("fileread?:"+file.canRead());//是否可读
		System.out.println("filewrite?:"+file.canWrite());//是否可写
		System.out.println("filemofifytime:"+new Date(file.lastModified()));
		System.out.println("filedirectory:"+file.isDirectory());//是否是一个目录
		System.out.println("parentfile:"+file.getParentFile());
RandomAccessFile类用于随机的读取文件,也就是可以不从文件的开始位置访问文件,可以从我们指定文件 任意位置开始读取,不如说客户端从服务器下载文件时的断点下载等等;另外在读取等长记录格式的文件时更有优势,不如说数据库里的一条条记录;如下面的程序实例,是向文件中写入一个三条数据,然后不按照顺序读取:

	public static void main(String[] args) throws IOException {
		
		emploee e1=new emploee("aaaaaaaa", 333);
		emploee e2=new emploee("bbbbbbbb", 2);
		emploee e3=new emploee("cccccccc", 3);
		RandomAccessFile w=new RandomAccessFile("2.txt", "rw");
		//如果姓名是中文使用writechar方法写入
		
		//如果姓名是英文
		w.write(e1.getName().getBytes());
		/*
		 * 这个地方应该使用writeInt方法把int类型的数据按照4个字节写入文件 同样使用readInt读取
		 * 如果使用write()写入使用read读取,则结果为333-256=77岁;
		*/
		w.writeInt(e1.getAge());
		w.write(e2.getName().getBytes());
		w.writeInt(e2.getAge());
		
		w.write(e3.getName().getBytes());
		w.writeInt(e3.getAge());
		w.close();
		
		RandomAccessFile r=new RandomAccessFile("2.txt", "r");
		int len=0;
		String name=null;
		byte buff[]=new byte[emploee.len];
		r.skipBytes(emploee.len+4);//跳转到第九个字节
		
		len=r.read(buff);//得出实际读到 的长度
		name=new String(buff,0,len);
		System.out.println(name+"  "+r.readInt());
		
		r.seek(0);//定位到0位置
		len=r.read(buff);
		name=new String(buff,0,len);
		System.out.println(name+"  "+r.readInt());
		
		r.skipBytes(emploee.len+4);
		len=r.read(buff);
		name=new String(buff,0,len);
		System.out.println(name+"  "+r.readInt());
	}
}
//定义员工类
class emploee{
	public String getName() {
		return name;
	}
	public int getAge() {
		return age;
	}
	private String name;
	private int age;
	static final int len=8;//定义姓名长度,以便于以后程序的升级
	
	public emploee(String name, int age) {
		if(name.length()>len)//保证姓名长度是指定的长度len
			name=name.substring(0, len);
		else {
			while(name.length()<len)
				name=name+"\u0000";
		}
		this.name = name;
		this.age = age;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心所向皆可成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值