自学Java系列 笔记3 IO 4

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();

      }

你可能感兴趣的:(自学之路—Java)