当前位置: 首页 > news >正文

三分钟学会使用java RandomAccessFile随机读写IO

本文章适用于参与工作的伙伴,马上实现功能,并不想完整的学习一遍,拿来就用。

RandomAccessFile randomAccessFile = null;
        try {
            randomAccessFile = new RandomAccessFile("/Users/Lai/IdeaProjects/Empty/src/main/resources/static/charfile.txt", "rw");
            // 获取文件指针位置,默认是从0开始,打印的接口是0,字符的位置从0开始
            System.out.println(randomAccessFile.getFilePointer());
            // 获取整个文件的字节数。中文字符占用3个字节,英文字符占用1个字节,有效表情占用4个字节
            System.out.println(randomAccessFile.length());
            // 读取的时候,会把换行符丢掉,但是换行符是被读取走了,getFilePointer()方法获取的指针位置是换行符之后的位置
            // 如果准备把读取的东西写回去,一定要注意换行符要自己填充上去
            // 如果readLine读取到了null,说明已经读取到文件末尾了
            // readLine是从当前的指针位置开始读取的,直到遇到了换行符结束,这是它认为的一个完整行
            String s = randomAccessFile.readLine();
            // 把当前的指针位置设置成n,指的是第n给字节的位置,字节从0开始计算。在次读取的时候,会从这个字节开始读取
            // 设置完成之后randomAccessFile.getFilePointer()的值就等于n了
            randomAccessFile.seek(3);
            System.out.println(randomAccessFile.getFilePointer());

            // 写数据,非常注意,写数据的时候,是字节覆盖原先的字节,并不是插入,指针会自动往后移动
            // 比如当前的指针位置是3,写入一个int数字,指针会自动移动到3+4(int占用四个字节)=7的位置
            // 好玩的来了,当调用writeInt(7)的时候,会把7转成 00 00 00 07,然后写入到文件中,然后在打开文件,就会看到乱码。
            // 此时原文件里面,位置从3开始的4个字节被覆盖成了 00 00 00 07
            randomAccessFile.writeInt(7);
            //知识点分割线/
            // 那怎么实现插入呢?比如现在有- - - - - - - - 8个字节,想要在第五个字节位置(我们说的是从0开始)插入一个汉字
            // 先把第五个位置开始,之后的所有字节都读取出来,放到一个临时的文件里面或者内存里面
            randomAccessFile.seek(5);
            // 准备5个字节之后到文件末尾的字节大小的空间
            byte[] temBytes = new byte[(int) (randomAccessFile.length()-5)];
            // 读取5个字节之后到文件末尾的字节
            randomAccessFile.read(temBytes);
            // 把当前的指针位置设置到5,因为上面read之后,指针已经移动到文件末尾了
            randomAccessFile.seek(5);
            String needInsertStr = "这个是我要插入的内容";
            randomAccessFile.write(needInsertStr.getBytes());
            // 把备份的内容写回去
            randomAccessFile.write(temBytes);
            
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if (randomAccessFile != null) {
                try {
                    // 关闭文件
                    randomAccessFile.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }

http://www.dtcms.com/a/123376.html

相关文章:

  • 数字内容体验的技术支持包含什么?
  • 公司内部建立apt源
  • Animated Movement Color
  • 【书籍】DeepSeek谈《持续交付2.0》
  • 第5篇:Linux程序访问控制FPGA端LEDR<三>
  • 如何用 nvm alias default 18.20.8 实现全局 Node.js 版本管理?一篇保姆级指南!!!
  • 深入解析回环检测:从原理到C++实战
  • 批量清空图片的相机参数、地理位置等敏感元数据
  • 电商素材革命:影刀RPA魔法指令3.0驱动批量去水印,实现秒级素材净化
  • 【C++】右值引用、移动语义与完美转发
  • 【倍增】P10264 [GESP202403 八级] 接竹竿|普及+
  • java继承练习
  • 走多远(拓扑排序,dp)
  • ChatRoom测试报告
  • 手眼标定-眼在手上
  • 安卓设备配置PAC代理服务器的完整指南:实现智能分流与开发加速
  • OfficePlus去掉PDF文件右键菜单里的PDF转换
  • Java Map和Set集合应用
  • docker安装nginx,基础命令,目录结构,配置文件结构
  • 0410 | 软考高项笔记:项目管理概述
  • jQuery多库共存
  • 甘特图和里程碑趋势图在项目监控中有哪些实际应用?
  • 本地laravel项目【dcat-admin】部署到liunx服务器
  • 论文笔记:Dynamic Spectral Graph Anomaly Detection
  • 先占个日常,等会写。
  • 如何白嫖Grok3 API? 如何使用Grok3 API调用实例?怎么使用Grok3模型?
  • 从零实现Agent智能体配置使用(Ragflow)
  • 多模态大模型在目标检测领域的最新进展
  • JS包装类型Object
  • AutoKeras 处理图像回归预测