Java:RandomAccessFile类:文件内容的读写访问操作

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

RandomAccessFile类是java提供的对文件内容的访问类,既可以读文件,也可以写文件。

RandomAccessFile类支持随机访问文件,也就是可以访问文件的任意位置。

(1)java的文件模型

在硬盘上的文件是以byte存储的,是数据的集合

(2)打开文件有两种模式

 “rw”(读写)    可以对文件进行读写

“r”(只读)    只能对文件进行读操作

代码示例:RandomAccessFile raf = new RandomeAccessFile(file,"rw")

文件指针,打开文件的时候指针在开头 pointer=0;

(3)写方法

raf.write(int)--一次只能写一个字节(后8位),传入一个int类型,那么需要进行4次写操作写完后指针指向下一个位置,准备再次写入

(4)读方法 

int b=raf.read()-----在指针在的位置读一个字节,然后把该字节操作成整数

(5)文件读写完一定要记得关闭io流(来自Oracle的官方警告)

具体代码示例:

package demo2;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
import java.util.RandomAccess;

public class RafDemo {

	public static void main(String[] args) throws IOException {
		// 在内存中创建文件对象
		File demo = new File("demo");// 不填路径则默认在工程文件夹下创建
		// 如果文件(夹)不存在则创建文件(夹)
		if (!demo.exists()) {
			// 创建文件夹
			demo.mkdir();
		}
		// 以demo文件夹作为父目录,创建一个raf.dat文件
		File file = new File(demo, "raf.dat");
		if (!file.exists()) {
			// 不存在则创建
			file.createNewFile();
		}
		// 进行读写操作

		// 指定要读写的对象与选择读写模式
		RandomAccessFile raf = new RandomAccessFile(file, "rw");
		// 查看指针位置
		System.out.println("第1次查看指针位置" + "前面有" + raf.getFilePointer() + "个字符");
		// write一次只能写1个字节,所以只会将A的低八位写进去
		raf.write('A');// 只写了一个字节进去
		// 查看指针位置
		System.out.println("第2次查看指针位置" + "前面有" + raf.getFilePointer() + "个字符");
		raf.write('B');
		// 将i写进去
		System.out.println("第3次查看指针位置" + "前面有" + raf.getFilePointer() + "个字符");
		int i = 0x7fffffff;
		// 用write方法每次只能写一个字节,int是4个字节也就是32位,则要写四次
		// 右移24位,则高八位变成低八位,就可以将高位写进去,如果看不懂这,可以先去看看二进制相关知识。

		raf.write(i >>> 24);
		raf.write(i >>> 16);
		raf.write(i >>> 8);
		raf.write(i);
		System.out.println("第4次指针位置:" + "前面有" + raf.getFilePointer() + "个字符");
		// 其实也有相应的方法可以直接写入int,上面的位移写入是他的底层原理
		raf.writeInt(i);
		// 尝试写入中文
		String s = "中";// 在用输入法打出这个字符串的时候是使用java默认的utf-16be编码

		//
		byte[] gbk = s.getBytes("GBK");// 在这将其转换为gbk编码
		raf.write(gbk);
		// 查看文件长度
		System.out.println("文件长度为" + raf.length() + "字节");
		/*
		 * Java是双字节编码,采用的是utf-16be编码方式,
		 * 
		 * 这里的write()写入A、B、i 都是采用的Java默认的utf-16be编码,
		 * 
		 * 而utf-16be编码是中文和英文都占两个字节。
		 * 
		 * 也就是A,B传进去之前是char型16位,本身是占两个字节,但每次只能传低八位进去,所以只传进去2个字节
		 * 
		 * 又因为大小写字母在编码表中对应的编码都在byte类型范围内,所以不需要进行位移都可以完整传进去
		 * 
		 * 而是整形,需要完整将i传进去需要传4次,每次以整形4个字节传进去,但每次只传进1个字节(低8位),所以i占了4个字节
		 * 
		 * 后面的汉字“中”采用的gbk编码方式是中文占两个字节,英文占1个字节。所以“中”占用了2个字节
		 * 
		 * 所以getBytes("gbk")指定了编码方式。
		 * 
		 * 因为在文件的(手动查看)编码方式中char字符占2个字节,
		 * 
		 * 所以A占2个字节,B占2个字节,int类的i占4字节,中占2字节,
		 *
		 * 所以文件长度为12个字节
		 */

		// 完整读取文件时必须从文件开始读取,也就是要将指针移到头部
		raf.seek(0);
		// 一次性读取,将读取到的内容都存储到字节数组中

		// raf.length()返回的是long类型

		// 创建byte数组来储存读取到的内容,数组长度由将要读取的文件长度决定
		byte[] buf = new byte[(int) raf.length()];

		// 从该文件读取最多数组长度个字节的数据到该字节数组。
		raf.read(buf);

		System.out.println(Arrays.toString(buf));
		// 使用指定的编码将buf数组转换为字符串的形式输出,
		String s1 = new String(buf, "GBK");

		System.out.println(s1);// 输出结果出现乱码
		/*
		 * 读取的时候是!整个!文件读取出来,
		 * 
		 * 其中int类的i分开四个写,
		 * 
		 * 所以计算机没法找到对应的编码,所以乱码了
		 */
		// 以16进制输出
		for (byte b : buf) {
			System.out.print(Integer.toHexString(b & 0xff) + " ");
		}
		// 关闭文件io流,务必!
		raf.close();
	}

}


专门处理文件的类------RandomAccessFile类 Java除了File类之外,还提供了专门处理文件的类,即RandomAccessFile(随机访问文件)类。该类是Java语言中功能最为丰富的文件访问类,它提供了众多的文件访问方法。RandomAccessFile类支持“随机访问”方式,这里“随机”是指可以跳转到文件的任意位置处读写数据。在访问一个文件的时候,不必把文件从头读到尾,而是希望像访问一个数据库一样“随心所欲”地访问一个文件的某个部分,... 阅读详情

相关推荐

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详解

RandomAccessFile是Java 输入/输出流体系中功能最丰富的文件内容访问类,它提供了众多的方法来访问文件内容,它既可以读取文件内容,也可以向文件输出数据。与普通的输入/输出流不同的是,RandomAccessFile支持"随机访问"的方式,程序可以直接跳转到文件的任意地方来读写数据。 RandomAccessFile可以自由访问文件的任意位置。 RandomAccessFile允许自由定位文件记录指针。 RandomAccessFile只能读写文件而不是流。 ...

qq_40100414的博客 3万+

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

RandomAccessFile学习笔记

本文将简要介绍这个类的使用,主要包括RandomAccessFile相关的一些概念,常见API的使用,如何利用RandomAccessFile实现一个断点续传的效果RandomAccessFile是什么?是 Java 中用于对文件进行随机访问的类。与普通的输入输出流不同,允许在文件中任意位置读写数据。RandomAccessFile的作用有哪些?随机访问:与其他输入输出流不同,允许在文件中任意位置进行读写操作,可以自由地定位文件指针。读写基本数据类型实现了DataInput和DataOutput。

热爱编程、热爱生活、热爱探索 4528

Java RandomAccessFile类深入应用指南

在软件开发中,文件的读写操作是一项基础且核心的任务。随机访问模式是一种允许从文件中间任意位置读写数据的技术,与传统的顺序访问模式不同,后者只能从文件头开始按顺序访问。随机访问模式特别适合于需要频繁修改文件中间数据的场景,例如数据库文件、多媒体文件和日志文件处理。这种模式下,开发者可以精确控制读写指针的位置,进行高效的读取或更新操作,无需从头到尾遍历整个文件。随机访问模式的特性让它在处理大型文件和需要快速读取或修改部分内容的应用中显得尤为关键。

weixin_33816734的博客 1282

Zemax中场曲与畸变图的深度解析与应用场景对比

本文深度解析了Zemax中场曲/畸变图与网格畸变图的核心原理、计算逻辑与适用场景。通过对比常规成像镜头、扫描镜头、鱼眼镜头及变形宽银幕镜头等实际案例,详细阐述了如何根据系统对称性、视场角及核心需求选择正确的分析工具与畸变评价标准,为光学设计中的畸变诊断与优化提供清晰指导。

sand8的博客 482

RandomAccessFile类使用详解

RandomAccessFile类使用详解疯狂java讲义读书笔记之RandomAccessFile类的使用详解1.RandomAccessFile特点  RandomAccessFile是java Io体系中功能最丰富的文件内容访问类。即可以读取文件内容,也可以向文件中写入内容。但是和其他输入/输入流不同的是,程序可以直接跳到文件的任意位置来读写数据。

Simon_night的专栏 1万+

ENVI中Landsat8大气校正法实现地表温度精准反演

本文详细介绍了在ENVI软件中,利用大气校正法对Landsat8热红外数据进行地表温度反演的完整流程。该方法通过辐射定标、大气参数获取、发射率估算及温度转换四个核心步骤,精准剔除大气干扰,还原地表真实温度,是城市热岛效应监测、农业旱情分析等应用的关键技术。

weixin_29292535的博客 150

Java IO——RandomAccessFile类详解

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

b15735105314的博客 2万+

保姆级避坑指南:用Livox官方工具搞定Mid-360多雷达自动标定(附源码Bug修复)

本文详细解析了使用Livox官方工具进行Mid-360多雷达自动标定的全流程,包括环境搭建、工具链配置、关键Bug修复及数据采集最佳实践。重点解决了PointCloudMapper.cpp边界检查缺失和calibration.cpp点云显示问题,提供了实用的代码修复方案和标定质量评估指标,帮助开发者高效完成激光雷达标定任务。

weixin_29053695的博客 281

CTP Python API及Demo(利用Swig 封装)Windows版(6.6.1traderapi)

环境:visual studio2015、python3.9、 参考的是景色大神的教程自己制作,因为直接用它编译好的无法使用,遂自己编译。 从CTP官网上下载CTP API点击下载。这里用的版本是v6.6.1_P1_tradeapi,想使用不同的版本下载即可: 安装Swig软件,本文中所用的Swig是swigwin-4.0.2版本,点击下载。下载后解压,将swig路径添加到环境变量中。 安装python,注意要安装64位版本,将环境变量配置好。本文所用的是3.9版本。 通过Swig得到pyth.

ProgramVAE的博客 2544

Java对文件和文件内容进行修改

Java对文件和文件内容进行修改 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 开发工具与关键技术:My Eclipse 10 ,Java 作者:陈显其 撰写时间:2019/5/7 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...

weixin_44580670的博客 2万+

Arduino+L298N电机驱动模块避坑指南:从接线到PWM调速的5个常见错误

本文详细解析了使用Arduino与L298N电机驱动模块时,从电源配置、跳线帽使用到PWM调速的5个常见错误与避坑指南。重点阐述了如何正确分离逻辑与电机电源、拔掉ENA/ENB跳线帽以实现PWM调速、理解H桥接线逻辑以控制直流电机正反转,并提供优化代码与散热建议,帮助开发者稳定驱动电机。

rust6ferris的博客 564

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

学习目标

3万+

用Arduino和MAX30102做个心率血氧仪,从硬件连线到算法调试全流程避坑

本文详细介绍了如何使用Arduino和MAX30102传感器构建高精度心率血氧仪,涵盖硬件连线、软件配置、信号处理及算法优化全流程。通过实战案例和避坑指南,帮助开发者快速实现临床级精度的健康监测设备,适用于可穿戴设备和医疗健康领域。

weixin_26897585的博客 388

优快云余额充值前必读:这5个隐藏条款,90%的开发者都忽略了(附iOS内购避坑指南)

本文揭示了优快云余额充值中90%开发者忽略的5个隐藏条款,包括不可退款规则、iOS内购限制、账号安全责任等关键内容,特别提供了iOS内购避坑指南,帮助开发者避免资金损失和账号风险。

weixin_26765287的博客 150

Java RandomAccessFile类:动态读取文件内容

所谓动态读取是指从文件的任意位置开始访问文件,而不是必须从文件开始位置读取到文件末尾。动态读取需要用到 Java 中的 RandomAccessFile 类,该类中有一个文件指针用于标识当前流的读写位置,这个指针可以向前或者向后移动。 RandomAccessFile 类的构造方法有如下两种重载形式。 RandomAccessFile(File file,String mode):访问参数 fi...

jijiangpeng的博客 719

SPAD IMX479规格_VOP

对于VOP的定义,很多人可能是不理解这一路的供电,实际上这一路供电是非常重要的,这是给器件SPAD供电,决定SPAD是否work,在大部分的paper以及大部分公司,基本都是叫VOP,名称是SPAD breakdown voltage power supply,严格意义上叫Operating Voltage,工作电压。当然有些公司也有一些其他叫法就不提了。其实大家可以明显的看出,典型值-20.5没有发生变化,市面上绝大多数VOP的典型值也都是在-20V这边。

致力于lidar应用开发 702

利用RandomAccessFile向文件指定位置插入内容

原理简介: RandomAccessFile依然不能向文件的指定位置插入内容,如果直接将文件记录指针移动到中间某位置后开始输出,则新输出的内容会覆盖文件中原有的内容,如果需要向指定位置插入内容,程序需要先把插入点后面的内容读入缓冲区,等把需要插入的数据写入文件后,再将缓冲区的内容追加到文件后面。 代码: package FileSplitAndMerge; import java.io.F...

大学生小汪的成长博客 4128

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

关于文件读写使用RandomAccessFile类的一些简单操作

最近接触到了一些关于文件生成以及文件内容写入的工作任务,关于文件的一些方法常用的是 java.io.File包中的一些方法。这些方法是在java1.0的时候提供的。然后在File类的注释中看到了这个包java.nio.file.Files;随后查看了一下这个包。简单了解了一下 File /** * An abstract representation of file and directory pathnames. ....... * <h3>Interoperability with {@

weixin_44168259的博客 463

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

1.5 RandomAccessFile类:动态读取文件内容

所谓动态读取是指从文件的任意位置开始访问文件,而不是必须从文件开始位置读取到文件末尾。动态读取需要用到 Java 中的 RandomAccessFile 类。 RandomAccessFile 是 Java 输入/输出流体系中功能最丰富的文件内容访问类,它提供了众多的方法来访问文件内容,它既可以读取文件内容,也可以向文件输出数据。由于 RandomAccessFile 可以从任意位置访问文件,所以在只需要访问文件部分内容的情况下,使用 RandonAccessFile 类是一个很好的选择。 RandomAc

you can you up up up的博客 1102

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

java使用RandomAccessFile类基于指针读写文件

java使用RandomAccessFile类基于指针读写文件读写模式文件读写操作写文件读文件示例:将文件A的内容复制到文件B文件指针操作long getFilePointer():该方法用于返回当前指针位置void seek(long pos):该方法可以设定指针位置int skipBytes(int n):该方法可以跳过n个字节 读写模式 使用该类时可以指定对要操作文件的读写模式 /** *...

Death Note 1439

Java的RandomAccessFile访问类

开发工具与关键技术:MyEclipse 10、Java语法 作者:邓婵 撰写时间:2019年06月13日 RandomAccessFile是Java输入/输出流体系中功能丰富的文件内容访问类,它提供了众多的方法来访问文件内容,它既可以读取文件内容,也可以向文件输出数据,程序可以直接跳转到文件的任意地方来读写数据。 特点:1.可以通过seek()方法设置指针的所在位置2. 该对象操作的必须是文件 3...

weixin_44547786的博客 826

java中RandomAccessFile类用法

RandomAccessFile类     只能访问文件,不能操作其他io设备     支持随机访问     在读写等长记录文件有优势 实例: import java.io.*; class Employee { private String name; private int age; public static final int LEN = 8; Str

RO_wsy的专栏 5733

File、RandomAccessFile类

一、File类 Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。 File对象代表磁盘中实际存在的文件和目录。 File类定义 File类的包名是java.io,其实现了Serializable, Comparable两大接口以便于其对象可序列化和比较。 public class File implements Serializable,Comparable<File>{ } File.separatorChar -- 静

codedot 481
上一篇: Java:File类:文件夹与文件的查询
下一篇: Java:IO流
include_ice
博客等级 码龄9年 307粉丝 139原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值