IO流之处理流:随机存取文件流(七)

随机存取文件流
  • RandomAccessFile声明在java.io包下,但是直接继承与java.lang.Object,并且实现了DataInput和DataOut这两个接口,意味着这个类可以进行读写操作。既可以作为输入流,也可以作为输出流,但是一个对象对应一种流
  • RandomAccessFile类支持“随机访问”的方式,程序可以直接跳到文件的任意位置来读、写文件。
  • RandomAccessFile对象包含一个记录指针,用以表示当前读写处的位置。RandomAccessFile对象可以自由移动记录指针。
  1. long getFilePoint():获取文件记录指针的当前位置。
  2. void seek(long pos):将文件记录指针定位到pos位置

RandomAccessFile类的构造器:

  1. public RandomAccessFile(File file,String mode)
  2. public RandomAccessFile(String path,String mode)
  • 创建RandomAccessFile类的实例需要指定一个mode参数,该参数指定RandomAccessFile的访问模式

    1. r:以只读的方式打开。
    2. rw:打开便可读取和写入。
    3. rwd:打开便可读取和写入,同步文件内容的更新。
    4. rws:打开便可读取和写入,同步文件内容的更新和元素据的更新。

    如果模式为r(只读),则不会创建文件,而是回去读取一个已经存在的文件,如果读取的文件不存在则会抛出异常。

    如果模式为rw(读、写),如果文件不存在,会创建文件,如果文件存在,则不创建。

示例:进行写操作,写出的文件已存在,且有内容,看看是否会覆盖掉原来的内容还是,在文件后面添加内容。

public class RandomAccessFileTest {
    @Test
    public void test1(){
        RandomAccessFile raf = null;
        try {
            raf = new RandomAccessFile("hi.txt", "rw");
            raf.write("abc".getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (raf != null){
                try {
                    raf.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

运行前:
在这里插入图片描述
运行后:
在这里插入图片描述
发现,是从文件的头部对内容进行覆盖的
使用以下seek(),更改记录指针的位置。

raf.seek(3);

在这里插入图片描述

使用RandomAccessFile这个类可以实现多线程下载的时候的断点续传。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

moonlight_Answer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值