说明:
在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次,最终结果: