Java流系列(六):RandomAccessFile(随机读写)

RandomAccessFile简介 RandomAccessFile功能构造函数特殊方法三级目录 功能 想比较之前的流要么读要么写,RandomAccessFile提供了读写操作RandomAccessFile声明在java.io包下,但直接继承于java.lang.Object类。并且它实现了Datalnput、DataOutput两个接口 看源码 public class RandomAccessFile implements DataOutput, DataInput, Closeable 构造函数 public RandomAcce 阅读详情
1、RandomAccessFile(随机访问文件):

可以对文件进行随机的读取和写出,这是到目前为止,我学习的唯一一个可以同时进行读和写操作的类。因为这个类同时实现了DataOutput, DataInput这两个接口.

完成文件指针的跳跃有两种方式:

  • randomAccessFile.seek(绝对位置(永远从文件的开头开始计算)); 可以向前移动指针,也可以向后移动指针.
  • randomAccessFile.skipBytes(相对位置(相对文件指针当前的位置开始计算新的位置));只能向后移动指针.
2、元数据:用来描述其它数据的数据.

实例化随机访问文件对象,同时指定要操作的文件名和文件的操作模式.

文件的操作模式包括:

  • r:只读,如果执行任何写出操作都会报IOException
  • rw:读写,这种模式下可以同时对象指定的文件进行读写操作.
  • rws:打开以便读取和写入,对于 “rw”,还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备
  • rwd:打开以便读取和写入,对于 “rw”,还要求对文件内容的每个更新都同步写入到底层存储设备
3、操作示例
RandomAccessFile randomAccessFile=new RandomAccessFile("zf.bak","rw");
//写出第一个人的信息
randomAccessFile.writeBytes("zhangsan");//gbk编码表。一个字母占一个字节,一个汉字占两个字节
randomAccessFile.writeInt(20);
//写出第二个人的信息
randomAccessFile.writeBytes("lisi");//只能写出字母,不能写汉字,否则然后通过read(byte[] data)读取数据会发生错误
randomAccessFile.writeInt(18);
//写出第三个人的信息
randomAccessFile.write("小梅".getBytes());//如果想写汉字,则必须使用write(byte[] data);
randomAccessFile.writeInt(18);
//得到文件指针的当前位置
long filePointer=randomAccessFile.getFilePointer();
System.out.println("filePointer="+filePointer);
//将文件指针定位到初始位置
randomAccessFile.seek(0);
//读取第一个人的信息
byte[] buffer=new byte[8];
int len=0;
//读取姓名
len=randomAccessFile.read(buffer);
String name=new String(buffer,0,len);
//读取年龄
int age=randomAccessFile.readInt();
System.out.println("name="+name+",age="+age);
//得到当前文件指针的位置
filePointer=randomAccessFile.getFilePointer();
System.out.println("filePointer="+filePointer);
/*
//读取第二个人的信息
buffer=new byte[4];
len=randomAccessFile.read(buffer);
name=new String(buffer,0,len);
age=randomAccessFile.readInt();
System.out.println("name="+name+",age="+age);*/
//如果想直接读取第三个人的信息,则务必要跳过第二个人的信息.
randomAccessFile.skipBytes(8);
filePointer=randomAccessFile.getFilePointer();
System.out.println("filePointer="+filePointer);
//读取第三个人的信息
buffer=new byte[4];
len=randomAccessFile.read(buffer);
name=new String(buffer,0,len);
age=randomAccessFile.readInt();
System.out.println("name="+name+",age="+age);
//从文件开始位置向后跳12个字节
randomAccessFile.seek(12);
//读取第二个人的信息
buffer=new byte[4];
len=randomAccessFile.read(buffer);
name=new String(buffer,0,len);
age=randomAccessFile.readInt();
System.out.println("name="+name+",age="+age);

在UTF-8修订编码中计算占用的字节数时需要注意:
一个字母占一个字节,一个汉字占3个字节.在每一次读取数据前都会首先读取一个表示整个字节长度的unshort类型的数据,占2个字节。因此算法如下:
张三=2+3*2=8 ,int=4

//1.实例化随机访问文件对象
RandomAccessFile randomAccessFile=new RandomAccessFile("wcf.bak","rw");
//2.使用UNICODE编码完成数据的写出和读入
randomAccessFile.writeUTF("张三");//张三=2+3*2=8
randomAccessFile.writeInt(20);//int=4
randomAccessFile.writeUTF("lisi");//lisi=2+4=6
randomAccessFile.writeInt(18);//int=4
randomAccessFile.writeUTF("小丽");//小丽=2+3*2=8
randomAccessFile.writeInt(20);//int=4
//将文件指针定位到文件的初始位置
randomAccessFile.seek(0);
//读取第一个人的数据
String name=randomAccessFile.readUTF();
int age=randomAccessFile.readInt();
System.out.println("name="+name+",age="+age);
long filePinter=randomAccessFile.getFilePointer();
System.out.println("filePointer="+filePinter);
/*//读取第二个人的数据
name=randomAccessFile.readUTF();
age=randomAccessFile.readInt();
System.out.println("name="+name+",age="+age);
filePinter=randomAccessFile.getFilePointer();
System.out.println("filePointer="+filePinter);*/
//跳过第二个人的信息
randomAccessFile.skipBytes(10);
//读取第三个人的数据
name=randomAccessFile.readUTF();
age=randomAccessFile.readInt();
System.out.println("name="+name+",age="+age);
filePinter=randomAccessFile.getFilePointer();
System.out.println("filePointer="+filePinter);
//读取第二个人的信息
randomAccessFile.seek(12);
name=randomAccessFile.readUTF();
age=randomAccessFile.readInt();
System.out.println("name="+name+",age="+age);
filePinter=randomAccessFile.getFilePointer();
System.out.println("filePointer="+filePinter);
java文件随机读写--RandomAccessFile 所谓随机读写,是指可以在任何时候将存取文件的指针指向文件内容的任何位置。假设存在一个文件尺寸为1024个字节的文件,如果按照顺序存取原则的话,我们只能采用类似于FileStream.read()或者FileReader.readLine()的方式来一段一段,或者一行一行地读取,在多数情况下,这样仿佛没有问题。但是,请考虑下面两个场景: 阅读详情

相关推荐

Java入门第138课——RandomAccessFile的read()和write()方法

然后,使用RandomAccessFile类的write方法向文件raf.dat写数字"1"。该方法写出一个字节,写出的是int值的低8位。使用RandomAccessFile类的read方法从文件raf.dat读取数字"1"。该方法读取一个字节,读取的是int值的低8位。1)使用RandomAccessFile的write方法向文件raf.dat写入数字“1”。运行testWrite方法,在当前工程下生成文件raf.dat,该文件的大小为1个字节。从输出结果可以看出,已经将数字“1”读取出来。

Java学习博客 1253

RandomAccessFile的seek方法

先说一下我得到的总结,简单的讲就是指定读取文件指针的开始位置,设置后指针位置之后读取时会从指针的下一位读取。 @Test public void testDemo(){ try { RandomAccessFile raf = new RandomAccessFile("E:\\box_up\\jj.txt", "rw"); raf.seek(9); System.out.println("" + raf.re

丁东的博客 4089

Java入门第139课——RandomAccessFile的read(byte[])和write(byte[])方法

然后,使用RandomAccessFile类的write(byte[])方法向文件raf.dat中写字符串"HelloWorld"。使用RandomAccessFile类的read(byte[])方法从文件raf.dat读取字符串"HelloWorld"。2)使用RandomAccessFile的read(byte[])方法从文件raf.dat中将字符串"HelloWorld"读取出来并打印到控制台。运行testWriteByteArray方法,将当前工程下的raf.dat文件的大小变为10个字节。

Java学习博客 787

Java IO——RandomAccessFile类详解

一、RandomAccessFile介绍 RandomAccessFile支持对文件的读取和写入随机访问(其他的输入流或者输出流只能进行一种操作,要么输入,要么输出)。RandomAccessFile把随机访问的文件对象看作存储在文件系统中的一个大型 byte 数组,然后通过指向该 byte 数组的光标或索引(即:文件指针 FilePointer)在该数组任意位置读取或写入任意数据。输入操作从文件指针开始读取字节(以字节为单位进行读取),并随着对字节的读取而前移此文件指针。如果RandomAccessFi

b15735105314的博客 2万+

【重启后nvidia-smi 命令出现错误】

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

qq_44769377的博客 5211

Anthropic API接入指南:连接失败、403鉴权与Claude Code集成排查

在AI应用开发中,API接入与鉴权机制是开发者绕不开的基础工程问题。无论是调用云端模型服务还是自建网关,网络连通性、HTTP状态码语义、模型路由映射都会直接影响服务可用性。本文从通用的网络诊断与鉴权原理出发,梳理了从TCP连接失败到403权限拒绝的典型链路,并深入解析网关模型路由匹配机制。在此基础上,进一步说明如何通过环境变量完成Claude Code与VS Code的本地集成,以及一套基于Python的可复现接入方案。内容涵盖Anthropic API高频报错定位、curl冒烟测试、SDK工程化实践,适合

weixin_28743405的博客 468

RandomAccessFile 随机读写流

一.随机读写流的介绍 RandomAccessFile-随机读写流,不属于任何流对象,直接继承了Object类,既可读又可写可随机访问读和写 以前学的流对象 读取从文件开头读,写末尾追加或开头覆盖 RandomAccessFile在文件任意位置上开始读和写,隐含了大型字节数组,文件都是由字节组成,文件二进制都放在自己的数组中 有一种游标或索引到隐含数组中,称为文件指针 输入操作从文件指针开始读取字节,并使文件指针超过读取的字节数。 如果在读/写模式下创建随机访问文件,则输出操作也可用; 输出操作从文件指针

sun_0128的博客 691

ui(new Ui::MainWindow)的解析

Ui命名空间的变量名,和默认空间的变量名虽然一样,但实际是两个不同的东西。所以构造函数中调用MainWindow是没问题的,因为它不是在调用自身,而是在调用其他命名空间下的另一个同名的MainWindow类。这里使用C++的成员初始化列表语法,初始化成员变量指针ui,可这里有个问题,在MainWindow的构造函数中new 一个MainWindow,这又调用一下MainWindow的构造函数,这岂不是会死循环?ui_mainwindow.h文件。mainwindow.h文件.

sinat_31608641的博客 1193

【Java第109集】java RandomAccessFile文件随机读写功能详解

是 Java 中一个功能强大的文件操作类,支持对文件进行随机读写(即可以跳转到文件的任意位置进行读写操作)。它既不属于也不属于类系,而是直接继承自Object类。随机访问:通过seek()方法定位到文件的任意位置。读写混合:支持同时读取和写入操作。灵活控制:可以修改文件的局部内容(如更新数据库记录、日志文件等)。优势提供了灵活的随机访问能力,适合需要频繁修改文件局部内容的场景(如数据库、日志系统)。局限性:相比 NIO 的和内存映射文件,的性能较低,且需要手动管理文件指针。适用场景。

学不可以已,活到老,学到老。 1197

RSA算法详解:万字文章详解RSA的加密与解密

为了彻彻底底的研究明白RSA算法,真的是。。煞(lei)费(si)苦(wo)心(le),首先我希望自己前前后后、彻彻底底的琢磨明白,其次我也希望我把他分享出来以后,大家都能读得懂,这篇文章真的是我迄今为止写的又臭又长的一篇文章了,但是我能保证的是,你读完了以后,绝对不会再问RSA是啥玩意儿了。。

布啦啦 7668

诊断CAPL自动化(3)——封装了接收诊断数据的通用CAPL脚本函数库

DiagGetRespPrimitiveSize (获取诊断响应的单个数据) diagGetPrimitiveData (获取诊断返回的所有数据) DiagGetRespParameter(数值类型) DiagGetRespParameter(字符串类型) DiagGetRespParameter(byte数组)

蚂蚁小兵 6218

1.RandomAccessFile:什么是 随机读写流RandomAccessFile???随机读写流RandomAccessFile常用方法有哪些???

跟汤老师学Java笔记: 随机读写流RandomAccessFile 完成:第一遍 1.什么是 随机读写流RandomAccessFile? 随机读写流,是一个字节流,可以对文件进行随机读写 随机:可以定位到文件的任意位置进行读写操作,通过移动指针(Pointer)来实现 读写:使用该流既能读取文件,也能写入文件 2. 随机读写流RandomAccessFile常用方法有哪些? 创建:RandomAccessFile raf=new RandomAccessFile(“a.txt”,“rw”) 第二个参数

ADbyCool的博客 646

主流反爬虫、反作弊防护与风控对抗手段

主流反爬虫、反作弊风控防护中的核心设计点与对抗策略

吴秋霖的博客 2555

随机流(RandomAccessFile)的使用介绍

一、作用:         随机流(RandomAccessFile)不属于IO流,支持对文件的读取和写入随机访问。二、随机访问文件原理:                首先把随机访问的文件对象看作存储在文件系统中的一个大型 byte 数组,然后通过指向该 byte 数组的光标或索引(即:文件指针 FilePointer)在该数组任意位置读取或写入任意数据。三、相关方法说明:       1、对象...

daimengs的博客 5279

万字详解YOLOv8网络结构Backbone/neck/head以及Conv、Bottleneck、C2f、SPPF、Detect等模块

YOLOv8是由Ultralytics开发的最先进的目标检测模型,推升了速度、准确性和用户友好性的界限。YOLO这一缩写代表“你只看一次”(You Only Look Once),通过在一次网络传递中同时预测所有边界框,提升了算法的效率和实时处理能力。相比之下,其他一些目标检测技术需要经过多个阶段或过程来完成检测。YOLOv8在流行的YOLOv5架构上进行了扩展,在多个方面提供了改进。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 14万+

MacBook Air老本重装系统

手里的这个本子型号是A1466,cpu i5,4G内存,硬盘ssd 120G。 重装系统可以在原系统上升级到更新版本,或者用U盘安装。 先确定,这个本子可以安装什么系统。 最权威的信息当然是apple的官网,地址:https://support.apple.com/zh-cn/HT211683 在“检查兼容性”中,可以依次检查每个系统兼容的硬件型号。Mojave是A1466能安装的最高版本。 确认兼容性后,下一步就是下载安装文件。还是这个页面稍下面一点可以找到。 这里告诉用户文件可以在什

bigwood99的博客 2万+

Java I/O流之随机流详解,包含随机流读写数据时编码格式问题!

Java I/O流中众多流,都有各自的优点。那么今天所讲解的随机流又是怎样的一种读写操作呢?往下看: 随机流:

专注前端技术,包括Web端、移动端、小程序、APP 1076

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

任意流(随机流)——RandomAccessFile

任意流(随机流)——RandomAccessFile。可以在文件的任何位置开始读写!与其他流不一样,这个流是独立于其他IO家族之外的,并不继承与InputStream、OutputStream而是直接继承于Object,但他是IO包中的,因为它支持IO操作。 RandomAccessFile有四种操作文件模式: ‘r’ 以只读方式打开。如果读取的文件不存在则会出现异常,调用结果对象的任何...

淡淡的心 1621

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java RandomAccessFile随机读写流

Java的RandomAccessFile提供对文件的读写功能,与普通的输入输出流不一样的是RamdomAccessFile可以任意的访问文件的任何地方。这就是“Random”的意义所在。 RandomAccessFile的对象包含一个记录指针,用于标识当前流的读写位置,这个位置可以向前移动,也可以向后移动。RandomAccessFile包含两个方法来操作文件记录指针 package dem

weishimeng17的博客 552

Java IO操作——简单了解RandomAccessFile随机读写文件操作类的使用

学习目标

3万+

Java随机读写文件

本文介绍了Java中的文件随机读写类RandomAccessFile。RandomAccessFile类定义在java.io包中,它与InputStream和OutputStream类在一个层次,是Object类的直接子类。RandomAccessFile类支持文件任意位置的读取而不只是顺序读取。

hitmengfanchao的博客 1387

Java IO流 --- 随机读写流1

文章目录1 概述2 写方法3 随机读取4 随机写入 细节 1 概述 RandomAcessFile 随机访问文件,自身具备读写的方法 通过 skipBytes( int x), seek( int x) 来达到随机访问 特点: 1 即可读取,又可以写入 2 内部维护了一个 大型的byte数组,通过对数组的操作完成读取和写入 3 通过getFilePointer()方法 获取指针的位...

ly_jing的博客 1182

RandomAccessFile随机流

1.RandomAccessFile类

Mr_zhangyj的博客 1019

IO流之RandomAccessFile随机读写类

RandomAccessFile类 随机读写类 1.可以操作文件   2.按照字节操作,字节流   3.read读和write写都是此类中的api方法   4.能够通过seek()方法随意移动文件的指针 RandomAccessFile类的两种模式 RandomAccessFile类对文件的随机访问有两种模式   只读模式   读写模式 常用的API 1.创建对象 Rand...

weixin_44802710的博客 412

android randomaccessfile 优化,RandomAccessFile为“随机读取类”

* 随机读取和写入流RandomAccessFile* 支持读取和写入随机访问文件* RandomAccessFile raf=new RandomAccessFile(文件对象,读写模式);跟着计划、今天学习了很多内容、相信忘记的几率很大、所以留下笔记:packageiotest;importjava.io.File;importjava.io.IOException;&...

weixin_39629352的博客 858

RandomAccessFile文件随机读写

RandomAccessFile是用来访问那些保存数据记录的文件的 model各个参数详解 * r 代表以只读方式打开指定文件 * rw 以读写方式打开指定文件  * rws 读写方式打开,并对内容或元数据都同步写入底层存储设备  * rwd 读写方式打开,对文件内容的更新同步更新至底层存储设备 方法区: 定位用的getFilePointer( ) 在文件里移动用的

每日运维 1037
上一篇: Java流系列(五):打印流、转换流、字符缓冲流
下一篇: Java流系列(七):其它
azhoufeng
博客等级 码龄10年 10粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值