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