晨风牧笛 2018-12-16 08:43 采纳率: 100%
浏览 345
已结题

java有关txt文件指针问题

在文件a中有10个整数按从小到大的顺序排列,在其中插入一个整数,插入后数据仍然有序
如果我已经找到了比输入的那个数大的某个数,可是现在文件指针在那个数上,如何把文件指针移到前一个数上

  • 写回答

2条回答 默认 最新

  • 阿进的写字台 2018-12-16 10:28
    关注

    如果你是一个字节一个字节读的(其实不建议, 这样很慢), 请使用 pos 记住之前数的位置
    1. 如果现在的数小于输入的数, 则pos记住现在的位置;
    2. 如果现在的数大于输入的数, break;

    后使用下面这个函数进行插入

        public static void insert(String filename, long offset, byte[] content) throws IOException {
            RandomAccessFile r = new RandomAccessFile(new File(filename), "rw");
            RandomAccessFile rtemp = new RandomAccessFile(new File(filename + "~"), "rw");
            long fileSize = r.length();
            FileChannel sourceChannel = r.getChannel();
            FileChannel targetChannel = rtemp.getChannel();
            sourceChannel.transferTo(offset, (fileSize - offset), targetChannel);
            sourceChannel.truncate(offset);
            r.seek(offset);
            r.write(content);
            long newOffset = r.getFilePointer();
            targetChannel.position(0L);
            sourceChannel.transferFrom(targetChannel, newOffset, (fileSize - offset));
            sourceChannel.close();
            targetChannel.close();
        }
    

    随便写了一个测试的

        public static void main(String[] args) throws IOException {
            long pos=0;
            RandomAccessFile rad=new RandomAccessFile("C://1.txt", "rw");
            int num=0;
            while((num = rad.read())!=-1){
                if (num!=32){// asc
                    if (num>(48+6)){
                        break;
                    }
                }
                pos++;
            }
            insert("C://1.txt", pos, "6".getBytes());
        }
    

    结果

    // 插入前的
    1 2 3 4 8 9 10 
    
    // 插入后的
    1 2 3 4 68 9 10 
    

    但是, 如果数字不够大的话, 建议先读入内存中(可以一行一行, 也可以全部读入), 插入你的数字后在重新写回文件。。

    评论

报告相同问题?

悬赏问题

  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥30 用arduino开发esp32控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿