在文件a中有10个整数按从小到大的顺序排列,在其中插入一个整数,插入后数据仍然有序
如果我已经找到了比输入的那个数大的某个数,可是现在文件指针在那个数上,如何把文件指针移到前一个数上
java有关txt文件指针问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
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但是, 如果数字不够大的话, 建议先读入内存中(可以一行一行, 也可以全部读入), 插入你的数字后在重新写回文件。。
解决 无用评论 打赏 举报