RandomAccessFile 类
- RandomAccessFile 类支持“随机访问”的方式,程序可以直接跳到文件的任意地方来读、写文件
- 支持只访问文件的部分内容
- 可以向已存在的文件后追加内容
- RandomAccessFile 对象包含一个记录指针,用以标示当前读写处的位置。
- RandomAccessFile 类对象可以自由移动记录指针:
- long getFilePointer():获取文件记录指针的当前位置
- void seek(long pos):将文件记录指针定位到 pos 位置
构造器
public RandomAccessFile(File file,String mode)
public RandomAccessFile(String name,String mode)
- 创建 RandomAccessFile 类实例需要指定一个 mode 参数,该参数指定 RandomAccessFile 的访问模式:
- r:以只读方式打开
- rw:打开以便读取和写入
- rwd:打开以便读取和写入,同步文件内容更新
- rws:打开以便读取和写入,同步文件内容和元数据的更新
- 通常使用的是 r 和 re
随机读
public class RandomAccessFileInputDemo {
public static void main(String[] args) {
try {
RandomAccessFileInputDemo.testRandomAccessFile();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void testRandomAccessFile() throws Exception {
// 第一个参数为文件路径,第二个参数为访问方式
RandomAccessFile raf = new RandomAccessFile("D:\\JAVA\\Java 基础入门\\IO 流\\test\\t1.txt","r");
// 设置读取文件内容起点,从 10 开始读取
raf.seek(10);
// 创建临时数组存放数据
byte[] b = new byte[50];
int len = 0;
while ((len = raf.read(b)) != -1) {
System.out.println(new String(b,0,len));
}
raf.close();
}
}
随机写
public class RandomAccessFileIOutputDemo {
public static void main(String[] args) {
try {
RandomAccessFileIOutputDemo.testRandomAccessFile();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 随机写
*/
public static void testRandomAccessFile() throws Exception{
RandomAccessFile raf = new RandomAccessFile("D:\\JAVA\\Java 基础入门\\IO 流\\test\\t1.txt","rw");
// 设置写的起始点,0代表从头开始写,raf.length 代表文件的最后开始
raf.seek(raf.length());
raf.write(("\n" + "囧的就扫地机啊实打").getBytes());
raf.close();
}
}
注意
-
xx.seek(0) 代表设置的起点为开头,xx.seek(xx.length) 代表文件的末尾
-
如果随机写,是在文件开头或者中间某个地方开始写的话,所写的内容就会覆盖等长度的内容