Java - I/O流 随机访问

RandomAccessFile

文件的随机访问指的是我们可以对文件访问任意位置的信息。而这个文件类就是 RandomAccessFile 。

关键成员变量以及方法:
fileponiter : 文件指针,用来标记当前读取或者写入的位置。

getFileponiter() :返回当前文件指针的位置

seek() :设置当前文件指针的位置

构造器:
RandomAccessFile(String pathname , String mode);
RandomAccessFile(File file ,String mode);
第一个构造器,指定路径,内部创建一个File,给定模式。
第二个构造器,给定File,给定模式。

那么RandomAccessFile的模式有哪些呢?
r:只支持读取
rw:支持读取和写入
rwd:支持读取和写入的同时,当我们修改文件内容和文件的元数据都会直接同步到存储设备上
rws:支持读取和写入,同时当我们修改文件内容会直接同步到存储设备上

(tips:文件的元数据:文件的大小,访问权限,本身的一些属性等等)

示例:

    public static void main(String[] args) {
        //我们对c.txt的内容进行随机访问,然后写入到d.txt;
        RandomAccessFile randomAccessFile = null;
        File src = new File("./c.txt");
        File dest = new File("./d.txt");
        FileOutputStream fileoutputStream = null;

        try {
            fileoutputStream = new FileOutputStream(dest);
            //对src文件进行随机访问,权限为只读
            //如果设置为rw模式我们还可以写入数据
            randomAccessFile = new RandomAccessFile(src,"r");
            byte[] buf = new byte[1024];
            int hasRead = 0;
            //打印文件指针现在的位置
            System.out.println(randomAccessFile.getFilePointer());
            //设置文件指针为50,把文件指针移动到50字节处
            randomAccessFile.seek(50);
            
            //此时是从c.txt的50字节处开始复制到d.txt。
            while(( hasRead = randomAccessFile.read(buf))!= -1) {
                fileoutputStream.write(buf);
            }

            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                randomAccessFile.close();
                fileoutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }
RandomAccessFile不能在任意位置去追加数据

因为 RandomAccessFile 的 write()方法,实在 filepointer 的位置覆盖写入,不能在任意位置去插入数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值