在文件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
但是, 如果数字不够大的话, 建议先读入内存中(可以一行一行, 也可以全部读入), 插入你的数字后在重新写回文件。。
解决 无用评论 打赏 举报
悬赏问题
- ¥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代码,有偿