java有关txt文件指针问题 5C

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

0

2个回答

如果你是一个字节一个字节读的(其实不建议, 这样很慢), 请使用 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 

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

0

一样的问题,我刚回答过
https://ask.csdn.net/questions/717217
你们是一个学校的?

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!