黑马程序员技术交流社区

标题: 关于RandomAccessFile的问题 [打印本页]

作者: 邓超军    时间: 2012-7-23 05:44
标题: 关于RandomAccessFile的问题
RandomAccessFile可以随机写入数据,但是都是覆盖写入!如果我想随机插入数据,那用什么方法呢?
作者: 黑马振鹏    时间: 2012-7-23 06:56
怎么理解随机插入?借助seek()就可以实现啊。
作者: 邓超军    时间: 2012-7-23 07:53
黑马振鹏 发表于 2012-7-23 06:56
怎么理解随机插入?借助seek()就可以实现啊。

如字符串 asdfg,我想在d前面插入wer,变成aswerdfg。
作者: 李菁    时间: 2012-7-23 10:07
用RandomAccessFile的seek方法指定指针位置,这样就可像你说的那样指定位置插入了

作者: 左建飞    时间: 2012-7-23 11:17
  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. }
复制代码





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