在文件a中有10个整数按从小到大的顺序排列,在其中插入一个整数,插入后数据仍然有序
如果我已经找到了比输入的那个数大的某个数,可是现在文件指针在那个数上,如何把文件指针移到前一个数上
如果你是一个字节一个字节读的(其实不建议, 这样很慢), 请使用 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
但是, 如果数字不够大的话, 建议先读入内存中(可以一行一行, 也可以全部读入), 插入你的数字后在重新写回文件。。
一样的问题,我刚回答过
https://ask.csdn.net/questions/717217
你们是一个学校的?