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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邓超军 中级黑马   /  2012-7-23 05:44  /  1961 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

RandomAccessFile可以随机写入数据,但是都是覆盖写入!如果我想随机插入数据,那用什么方法呢?

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
怎么理解随机插入?借助seek()就可以实现啊。
回复 使用道具 举报
黑马振鹏 发表于 2012-7-23 06:56
怎么理解随机插入?借助seek()就可以实现啊。

如字符串 asdfg,我想在d前面插入wer,变成aswerdfg。
回复 使用道具 举报
用RandomAccessFile的seek方法指定指针位置,这样就可像你说的那样指定位置插入了
回复 使用道具 举报
  1. /**
  2. *
  3. * @param skip 跳过多少过字节进行插入数据
  4. * @param str 要插入的字符串
  5. * @param fileName 文件路径
  6. */
  7. public static void insert(long skip, String str, String fileName){
  8.         try {
  9.                 RandomAccessFile raf = new RandomAccessFile(fileName,"rw");
  10.                 if(skip <  0 || skip > raf.length()){//如果要跳过的字节数小于0或大于了原来文件的长度,则判定错误
  11.                         System.out.println("跳过字节数无效");
  12.                         return;
  13.                 }
  14.                 byte[] b = str.getBytes();
  15.                 raf.setLength(raf.length() + b.length);//设置插入字符串后的文件长度
  16.                 for(long i = raf.length() - 1; i > b.length + skip - 1; i--){//从后往前读取并写入原字符串中跳过后的字符串。即你举的例子中的dfg,循环读取并写入gfd。
  17.                         raf.seek(i - b.length);//这是原来字符串的长度。i--就是向回读。
  18.                         byte temp = raf.readByte();
  19.                         raf.seek(i);//现字符串的末尾。
  20.                         raf.writeByte(temp);
  21.                 }
  22.                 raf.seek(skip);//将原字符串搬迁完毕后,写入新的字符串即可。
  23.                 raf.write(b);
  24.                 raf.close();
  25.         } catch (Exception e) {
  26.                 e.printStackTrace();
  27.         }
  28. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

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