一. RandomAccessFile类介绍:
1. RandomAccessFile类既可以读取文件内容,也可以向文件输出数据
2. RandomAccessFile类支持“随机访问”的方式,程序可以直接跳到文件的任意地方来读写文件
2.1 支持只访问文件的部分内容
2.2 可以向已存在的文件后追加内容
3. RandomAccessFile对象包含一个记录指针,用以标示当前读写出的位置。RandomAccessFile类对象可以自由移动记录指针:
3.1 long getFilePointer():获取文件记录指针的当前位置
3.2 void seek(long pos):将文件记录指针定位到pos位置
4. 创建RandomAccessFile类可以指定一个mode参数,该参数指定RandomAccessFile的访问模式:
4.1 r:以只读方式打开
4.2 rw:以读、写方式打开
二. 示例代码
package test.com.atguigu.javase.lesson10;
import org.junit.Test;
import java.io.IOException;
import java.io.RandomAccessFile;
public class RandomAccessFileTestTest {
@Test
public void testRandomAccessFile() throws IOException {
//1.创建RandomAccessFile对象
RandomAccessFile access = new RandomAccessFile("hello.txt", "rw");
//2.对文件进行读写操作
//读
String str = null;
while((str = access.readLine()) != null){
System.out.println(str);
}
//向文件结尾写入
access.writeBytes("www.atguigu.com");
//设置指针位置
access.seek(20);
//向指定位置写入字符串:把原有的文件内容覆盖了
access.writeBytes("insert");
//3.关闭RandomAccessFile对象
access.close();
}
/**
* 使用RandomAccessFile
* 向hello.txt文件中插入一行:I love Gongfu...
* 原文件内容下移
*/
@Test
public void testRandomAccessFile2() throws IOException {
//1.创建RandomAccessFile对象
RandomAccessFile access = new RandomAccessFile("hello.txt","rw");
//2.先读第一行
String lineOne = access.readLine();
//3.把第一行后面的内容先读取到一个byte数组中
byte[] buffer = new byte[(int) (access.length() - lineOne.length())];
access.read(buffer);
//4.指针移动到写位置
access.seek(lineOne.length());
//5.写入要写的字符串
access.writeBytes("\nI Love Gongfu...\n");
//6.在写入先前的内容
access.read(buffer);
//7.关闭RandomAccessFile对象
access.close();
}
}