RandomAccessFile类
- RandomAccessFile类,不属于流,但具有读写文件数据的功能,可以随机从文件的任何位置开始执行读写数据的操作
- RandomAccessFile类可以将文件以指定的操作权限(如只读,只写等)的方式打开,具体使用哪种权限取决于创建它所采用的构造方法
通过两种构造方法创建RandomAccessFile对象,需要接受两个参数:第一个参数指定关联的文件,第二个参数mode指定访问文件的模式(文件的权限)
RandomAccessFile构造方法如下:
RandomAccessFile(File file,String mode)//使用参数file指定被访问的文件,并使用mode来决定指定访问模式
RandomAccessFile(File name,String mode)//使用参数name指定被访问文件的路径,并使用mode来决定指定访问模式
参数mode有四个值:
- r:表示以只读方式打开。如果试图对RandomAccessFile对象执行写入操作,会抛出I/OException异常
- rw:表示以"读写"方式打开。如果该文件不存在,则会自动创建该文件。
- rws:表示以"读写"方式打开。与"rw"相比,它要求对文件的内容或者元数据的每个更新都同步写入到底层的存储设备
- rwd:表示以**"读写"方式打开。它要求对文件的内容**的每个更新都同步写入到底层的存储设备
RandomAccessFile对象中包含了一个记录指针来标识当前读写处的位置**。顺序读写,指针在开始处为0的位置**,除此之外,可以自由的移动记录指针,既可以向前也可以向后。
RandomAccessFile常用的方法:
int skipBytes(int n) //使读写指针从当前位置开始,跳过n个字节
void write(byte[] b) //将指定的字节数组写入到这个文件,并从当前文件指针开始
long getFilePointer() //返回当前读写指针所处的位置
void seek(long pos) //设定读写指针的位置,与文件的开头相隔pos个字节数
void setLength(long newLength) //设置此文件的长度
final String readLine() //从指定文件当前指针读取下一行内容
seek(long pos)方法可以记录指针向前,向后自由移动
package com.Put;
import java.io.RandomAccessFile;
public class IO {
public static void main(String[] args) throws Exception{
//创建RandomAccessFile对象,并指定以读写模式打开time.txt文件
RandomAccessFile raf = new RandomAccessFile("time.txt","rw");
//读取还可以使用的次数,第一次读取时times为5
int times = Integer.parseInt(raf.readLine()) - 1;//通过包装类的parseXxx静态方法将字符串转换为基本数据类型
//判断剩余次数
if (times>0){
//每执行一次代表使用一次,次数就减少一次
System.out.println("您还可以使用:"+times+"次");
//将记录指针重新指向文件开头
raf.seek(0);
//将剩余次数再次写入文件
raf.write((times+"").getBytes());
}else {
System.out.println("次数已经用完!");
}
raf.close();
}
}
运行结果: