Java中I/O包中的——“非流类RandomAccessFile类”——读、写文件数据的功能(只读、可读写等)

说明:
在IO包中,提供了一个RandomAccesseFile类,它不属于流类,但具有读写文件数据的功能,可以随机从文件的任何位置开始并以指定的操作权限(如只读、可读写等)执行读写数据的操作。
RandomAccesseFile类构造方法:
在这里插入图片描述
RandomAccessFile(String name,String mode)中的参数mode用于指定访问文件的模式,也就是文件的操作权限。

参数mode取值:

r:以只读的方式打开文件。如果执行写操作,会报IOException异常。
rw:以“读写”的方式打开文件。如果文件不存在,会自动创建该文件。
rws:以“读写”方式打开文件。与“rw”相比,它要求对文件的内容或元数据的每个更新都同步写入到底层的存储设备。
rwd:以“读写”方式打开文件。与“rw”相比,它要求对文件的内容的每个更新都同步写入到底层的存储设备。
RandomAccessFile raf = new RandomAccessFile("c:\\javas\\b.txt", "r");
   raf.write(97);//报错,拒绝访问,因为r是只读参数

原理:
RandomAccessFile对象包含了一个记录指针来标识当前读写处的位置。
当新建RandomAccessFile对象时,该对象的文件记录指针会在文件开始处(即标识为0的位置);
当读写了n个字节后,文件记录指针会向后移动n个字节。
除了按顺序读写外,RandomAccessFile对象还可以自由的移动记录指针,既可以向前移动,也可以向后移动。
RandomAccessFile常用方法:
在这里插入图片描述
说明:
seek(long pos)方法可以使RandomAccessFile对象中的记录指针向前、向后自由移动,通过getFilePointer()方法,便可获取文件当前记录指针的位置。
示例(模拟软件使用次数):
首先在记事本中写入使用的次数;
在这里插入图片描述
然后就可以使用代码来实现了:

package liu;

import java.io.IOException;
import java.io.RandomAccessFile;

public class RandonAccesseFile_Use {
  public static void main(String[] args) throws IOException {
     RandomAccessFile raf3 = new RandomAccessFile("c:\\javas\\bbc.txt", "rw");
   int times =Integer.parseInt(raf3.readLine())-1 ;//raf3.readLine();//返回的是字符串  Integer.parseInt将字符串转换为int类型
   if(times>0) {
    System.out.println("你还有"+times+"次试用机会");
    raf3.seek(0);
    raf3.write((times+"").getBytes());//times+""-------自动转换为字符串
   }else {
    System.out.println("试用结束");
   }
  }
}

在这里插入图片描述
可以运行5次,最终结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱睡觉的小馨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值