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

Java - 随机存取文件类

在Java中,随机存取文件(Random Access File)通常使用java.io.RandomAccessFile类来实现。这个类允许你读取和写入文件的任意位置,而不是像FileReaderFileWriter那样只能从头开始或追加到文件末尾。

RandomAccessFile类提供了用于读取和写入文件内容的各种方法,如read(), write(), seek(), skipBytes(), 等等。这些方法允许你以任何顺序读取和写入文件的内容。

以下是一个简单的示例,演示了如何使用RandomAccessFile类来读取和写入文件的特定位置:

import java.io.IOException;
import java.io.RandomAccessFile;public class RandomAccessFileExample {public static void main(String[] args) {String fileName = "example.dat";try (RandomAccessFile raf = new RandomAccessFile(fileName, "rw")) {// 写入数据到文件的开始位置raf.writeBytes("Hello, ");// 移动到文件的末尾raf.seek(raf.length());// 在文件末尾写入数据raf.writeBytes("World!");// 移动到文件的开始位置raf.seek(0);// 读取文件的内容byte[] buffer = new byte[1024];int bytesRead = raf.read(buffer);System.out.println(new String(buffer, 0, bytesRead)); // 输出 "Hello, World!"} catch (IOException e) {e.printStackTrace();}}
}

在上面的示例中,我们首先创建了一个名为example.datRandomAccessFile对象,并指定了读写模式(“rw”)。然后,我们使用writeBytes()方法向文件的开始位置写入字符串"Hello, “。接着,我们使用seek()方法将文件指针移动到文件的末尾,并使用writeBytes()方法向文件末尾写入字符串"World!”。最后,我们再次使用seek()方法将文件指针移动到文件的开始位置,并使用read()方法读取文件的内容。

注意,在读取文件时,我们创建了一个字节数组buffer来存储读取的数据。read()方法尝试读取最多buffer.length个字节的数据,并将其存储在buffer数组中。实际读取的字节数由read()方法返回,并用于创建新的字符串。这是因为read()方法可能不会读取整个buffer数组,特别是当文件较小时。

此外,请注意,当使用RandomAccessFile类时,你需要手动管理文件指针的位置。如果你忘记调用seek()方法来设置文件指针的位置,那么你可能会意外地覆盖文件的内容或读取错误的数据。

相关文章:

  • c++自定义定时器
  • Flutter基础 -- Flutter容器布局
  • 【Redis】Hash介绍与应用详解
  • Huawei 大型 WLAN 组网 AC 间漫游
  • linux基础-数据库建库建表
  • SiC碳化硅陶瓷膜的热导性
  • Three.js动效(第11辑):大屏+3D+动效,三位一体,是绝配。
  • 为什么选择mobx
  • vue使用tailwindcss
  • Python | 刷题笔记
  • vue -ant -design 卡片是布局 实现动态计算 当前的 左右间距 实现居中
  • MySQL——覆盖索引
  • 面试经典题:创建三个线程,按顺序依次循环打印hello+i
  • 你觉得学历在贬值吗?
  • 关于ASPICE 4.0评估师资质更新的说明-亚远景科技
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 2017 年终总结 —— 在路上
  • Android系统模拟器绘制实现概述
  • angular学习第一篇-----环境搭建
  • iOS 颜色设置看我就够了
  • Javascript编码规范
  • Laravel 中的一个后期静态绑定
  • PAT A1120
  • v-if和v-for连用出现的问题
  • Vue.js源码(2):初探List Rendering
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 机器学习中为什么要做归一化normalization
  • 警报:线上事故之CountDownLatch的威力
  • 理清楚Vue的结构
  • 实习面试笔记
  • 通信类
  • 系统认识JavaScript正则表达式
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 1.Ext JS 建立web开发工程
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • (9)STL算法之逆转旋转
  • (solr系列:一)使用tomcat部署solr服务
  • (第二周)效能测试
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (算法)求1到1亿间的质数或素数
  • (转)socket Aio demo
  • (转)关于pipe()的详细解析
  • .net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET企业级应用架构设计系列之技术选型
  • [15] 使用Opencv_CUDA 模块实现基本计算机视觉程序
  • [20170705]lsnrctl status LISTENER_SCAN1
  • [Android 数据通信] android cmwap接入点
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存