Java基础 -> RandomAccessFile(可读又可取,可输入可输出的处理流,属于字节流),附加指定位置插入数据

/**
     * RandomAccessFile:既可以读又可以取的流,继承于字节流
     * mode:
     * r---只读(输入),不能自己创建文件
     * rw---读取(输入输出),会创建文件
     * rwd---读取(输入输出),可更新
     * txt和png都可以正常复制
     */
    @Test
    public void test2() throws Exception {
        //读,输入
        //RandomAccessFile read = new RandomAccessFile("Test921复制文件.txt", "rw");
        RandomAccessFile read = new RandomAccessFile("Test922示例图.png", "rw");
        //取,输出
        //RandomAccessFile write = new RandomAccessFile("Test926随机读取.txt", "rw");
        RandomAccessFile write = new RandomAccessFile("Test922示例图复制.png", "rw");

        int i ;
        while (( i = read.read())!= -1){
            write.write(i);
        }
        read.close();
        write.close();
    }

附加指定位置插入数据

 /**
     * 在原有的数据中插入xyz,我在里原有的数据为123456789
     * 我要在3后面插入xyz
     */
    @Test
    public void test() throws Exception {
        RandomAccessFile randomAccessFile = new RandomAccessFile("Test927.txt", "rw");
        //指针指到索引为3的位置,实际在数组的4号位
        randomAccessFile.seek(3);
        byte[] bytes = new byte[2];
        //可变的字符串,StringBuilder不同步,StringBuffer同步
        //将索引后的所有数据以字符串的形式,储存,因为写入的时候会将后面的数据替换
        //需要先复制后面的数据,添加xyz后在加上原来的数据
        StringBuilder stringBuilder = new StringBuilder();
        int len;
        while ((len = randomAccessFile.read(bytes)) != -1) {
            //将数据添加到stringBuilder的末尾(456789)
            stringBuilder.append(new String(bytes, 0, len));
        }
        //打印复制的数据到控制台
        System.out.println(stringBuilder);//456789
        //调回指针,上面的指针已经到了末尾
        randomAccessFile.seek(3);
        //添加xyz从索引3的位置,且会替换掉之后的所有数据(456789)
        randomAccessFile.write("xyz".getBytes());
        //现在的指针在数据的末尾(123xyz),再将复制的字符串加入
        randomAccessFile.write(stringBuilder.substring(0).getBytes());
        //打印一下文件的内容到控制台
        randomAccessFile.seek(0);
        while ((len = randomAccessFile.read()) != -1) {
            System.out.print((char) len);//123xyz456789
        }
        randomAccessFile.close();
    }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值