黑马程序员技术交流社区

标题: 用RandomAccessFile如何在文件指定位置插入数据? [打印本页]

作者: 刘焕新    时间: 2013-3-26 19:55
标题: 用RandomAccessFile如何在文件指定位置插入数据?
本帖最后由 刘焕新 于 2013-3-30 12:27 编辑

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

作者: lucy198921    时间: 2013-3-27 10:43
/**
*
* @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();
        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2