A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 刘焕新 于 2013-3-30 12:27 编辑

刚学习到IO流的RandomAccessFile类,据了解,此类可读又可写,其内部缓冲区是个大型byte数组。通过操作文件指针,可在指定位置进行数据读/写。
但是我发现此写入操作是替换行为,而不是插入行为,也就是说是把之前位置的数据替换掉了,原来的数据被覆盖了。
所以我问题来了,请问在这种情况下,如何在指定位置插入数据而不覆盖原有数据?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 新人加油

查看全部评分

1 个回复

倒序浏览
/**
*
* @param skip 跳过多少过字节进行插入数据
* @param str 要插入的字符串
* @param fileName 文件路径
*/
public static void beiju(long skip, String str, String fileName){
        try {
                RandomAccessFile raf = new RandomAccessFile(fileName,"rw");
                if(skip <  0 || skip > raf.length()){
                        System.out.println("跳过字节数无效");
                        return;
                }
                byte[] b = str.getBytes();
                raf.setLength(raf.length() + b.length);
                for(long i = raf.length() - 1; i > b.length + skip - 1; i--){
                        raf.seek(i - b.length);
                        byte temp = raf.readByte();
                        raf.seek(i);
                        raf.writeByte(temp);
                }
                raf.seek(skip);
                raf.write(b);
                raf.close();
        } catch (Exception e) {
                e.printStackTrace();
        }
}

点评

哦,原来是先算总长度,然后从原文末尾将字节一个个往后挪,最后再插入。呵呵很牛×,学习了!  发表于 2013-3-27 23:50

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马