java.io.RandomAccessFile 介绍

java.io.RandomAccessFile 是 Java 标准库中提供的一个类,允许对文件进行随机访问读写操作。与 FileInputStream 和 FileOutputStream 不同,RandomAccessFile 可以读取和写入同一个文件,并且可以在文件的任意位置进行读写操作。它既可以作为输入流,也可以作为输出流使用。

RandomAccessFile 的主要功能

  1. 随机访问文件:可以通过设置文件指针在文件的任意位置进行读写操作。
  2. 读取和写入基本数据类型:支持读取和写入基本数据类型,如 intlongfloatdoublebytecharString 等。
  3. 双向操作:既可以进行读操作,也可以进行写操作。

构造方法

public RandomAccessFile(File file, String mode) throws FileNotFoundException
public RandomAccessFile(String name, String mode) throws FileNotFoundException
  • file:要操作的文件对象。
  • name:要操作的文件名。
  • mode:文件的访问模式。常见的模式有:
    • "r":以只读方式打开文件。
    • "rw":以读写方式打开文件。如果文件不存在,则创建该文件。
    • "rws":以读写方式打开文件,并对文件的内容或元数据的每个更新都同步写入到底层存储设备。
    • "rwd":以读写方式打开文件,并对文件内容的每个更新都同步写入到底层存储设备。

常用方法

  • read():读取一个字节并返回(返回值是 0 到 255 之间的 int 值),如果已经到达文件末尾,则返回 -1。
  • read(byte[] b):读取字节数组 b 的数据。
  • readInt()readLong()readUTF() 等:读取特定数据类型。
  • write(int b):将一个字节写入文件。
  • write(byte[] b):将字节数组 b 的内容写入文件。
  • writeInt(int v)writeLong(long v)writeUTF(String str) 等:写入特定数据类型。
  • seek(long pos):将文件指针定位到 pos 位置。
  • getFilePointer():返回当前文件指针的位置。
  • length():返回文件的长度。
  • setLength(long newLength):设置文件的长度。

示例代码

下面是一个示例,演示如何使用 RandomAccessFile 进行文件的读写操作:

import java.io.IOException;
import java.io.RandomAccessFile;public class RandomAccessFileExample {public static void main(String[] args) {try {// 创建一个RandomAccessFile对象,以读写模式打开文件RandomAccessFile raf = new RandomAccessFile("example.txt", "rw");// 写入数据raf.writeInt(12345);raf.writeUTF("Hello, World!");// 获取文件指针的位置long pointer = raf.getFilePointer();System.out.println("Current file pointer position: " + pointer);// 将文件指针移动到文件开头raf.seek(0);// 读取数据int number = raf.readInt();String text = raf.readUTF();// 打印读取的数据System.out.println("Read int: " + number);System.out.println("Read UTF: " + text);// 关闭文件raf.close();} catch (IOException e) {e.printStackTrace();}}
}

在这个示例中,RandomAccessFile 用于将一个整数和一个字符串写入文件,然后将文件指针移回到文件的开头,并从文件中读取并打印这些数据。这展示了 RandomAccessFile 的随机访问能力,即可以在文件的任意位置进行读写操作。

注: raf.writeInt(12345); 整数数据,记事本打开不可见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/46369.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java】字符与字符串

文章目录 1.字符char1.1 编码1.2 转义字符1.3 char的类型转换1.4 字符的比较1.5 Character类 2.String类型2.1 String对象常用的方法:2.2 从控制台读取字符串2.3 从控制台读取字符2.4 字符串的比较2.5 子串和字符2.6 字符串的转化2.7 格式化控制台输出 1.字符char …

IOT 可编程控制系统

IOT(物联网)可编程控制系统,如GF-MAXCC等,是一种集成了多种先进技术和功能的智能化控制设备,它能够在物联网系统中发挥关键作用,实现对多种设备的集中管理和控制。具体来说,IOT可编程控制系统的…

PyTorch构建一个肺部CT图像分类模型来分辨肺癌

当你有5万个标注的肺部CT DICOM图像数据,并且希望使用PyTorch构建一个肺部CT图像分类模型来分辨肺癌,以下是详细的步骤和示例代码: 数据准备 首先,确保你的数据集被正确分为训练集、验证集和测试集,并且每个图像都有相…

找到并留住最佳员工

找到并留住最佳员工 每个月我都会接到许多猎头的电话,有些猎头比较专业,但绝大多数在我看来与猎头二字还是有很大差距的。 与猎头接触多了,自然也了解了他们的工作,包括操作手法,总体上国内的猎头行业还处在初级阶段。 总结就是“盲目推荐,以量取胜”。 目前现状 许多…

【算法专题】双指针算法之 1089.复写零(力扣)

欢迎来到 CILMY23的博客 🏆本篇主题为:双指针算法之 1089.复写零(力扣) 🏆个人主页:CILMY23-CSDN博客 🏆系列专栏:Python | C | C语言 | 数据结构与算法 | 贪心算法 | Linux | 算…

2024版彩虹晴天全能知识付费源码+虚拟商城解决方案 含一键搭建视频教程 无授权限制

是一款知识付费平台的核心,更是集虚拟商城、实物交易、代理分销于一体的全能解决方案。 核心亮点: 最新源码,独家首发:经过精心修复与更新,本源码由我们团队亲自把关,确保您获得的是市场上最新鲜、最稳定…

DBA 数据库管理 表管理 数据批量处理。表头约束

表管理 建库 库名命名规则:仅可以使用数字、字母、下划线、不能纯数字 不可使用MySQL命令或特殊字符 库名区分字母大小写 加if not exists 命令避免重名报错 create database if not exists gamedb; 建表 drop database if exists gamedb ; 删表…

常用软件的docker compose安装

简介 Docker Compose 是 Docker 的一个工具,用于定义和管理多容器 Docker 应用。通过使用一个单独的 YAML 文件,您可以定义应用所需的所有服务,然后使用一个简单的命令来启动和运行这些服务。Docker Compose 非常适合于微服务架构或任何需要…

【论文阅读】LLM4GCL: CAN LARGE LANGUAGE MODEL EMPOWER GRAPH CONTRASTIVE LEARNING?

LLM4GCL: CAN LARGE LANGUAGE MODEL EMPOWER GRAPH CONTRASTIVE LEARNING? https://openreview.net/forum?idwxClzZdjqP 图对比学习的重点就是图数据的增强,针对图中节点的表示或者图的结构进行扰动,通过对比学习得到对应的节点表示,以便于…

Kafka基础入门-代码实操

Kafka是基于发布/订阅模式的消息队列,消息的生产和消费都需要指定主题,因此,我们想要实现消息的传递,第一步必选是创建一个主题(Topic)。下面我们看下在命令行和代码中都是如何创建主题和实现消息的传递的。…

【Linux 配置静态IP】Ubuntu20.04

最近学习网络编程,为了方便学习需要Ubuntu配置静态IP,网上看了好多贴子跟着试了下可以实现,但重启虚拟机后有时就无法连接,总之各种各样问题;相关的配置方法也比较凌乱,有用netplan 或者 ifupdown ,笔者简单…

数据库崩溃时事务的恢复机制

在数据库管理系统中,确保数据的一致性和完整性是至关重要的。特别是在面对系统崩溃或意外中断时,如何有效地恢复事务状态成为了一个关键问题。MySQL的InnoDB存储引擎通过引入REDO日志和UNDO日志机制,巧妙地解决了这一问题,确保了事…

C++知识点:C和C++(自用)

C和C 1.类和结构体的关系:2.面向对象和面向过程3.头文件和标准命名空间4.cin和cout5. const在C中和C中的区别6.const全局作用域7 new和delete8 内联函数9 函数重载10. 函数重载的匹配 引用: [1]C语言中文网 1.类和结构体的关系: 类是结构体的…

Linux bash: yum-config-manager: command not found的解决方法

yum-config-manager简介 Linux yum-config-manager 是一个用于管理 YUM 仓库配置的工具,它允许用户启用、禁用、添加或删除 YUM 仓库。这个命令在基于 Red Hat 的系统中广泛使用,比如 CentOS 和 Fedora。 可能原因 用户可能未安装 yum-utils 包&#…

Qt文件下载工具

在Qt中实现文件下载功能,通常可以通过多种方式来完成,包括使用 QNetworkAccessManager 和 QNetworkReply 类,或者使用更高级别的 QHttpMultiPart 类。以下是两种常见的实现方法: 方法1:使用 QNetworkAccessManager 和…

pxe高效网络批量装机

文章目录 一, PXE远程安装服务(一)三种系统装机的方式(二)linux装机1. 加载 Boot Loader2. 加载启动安装菜单3. 加载内核和 initrd4. 加载根文件系统5. 运行 Anaconda 安装向导 (三)实现过程&am…

【ROS2】测试

为什么要进行自动化测试? 以下是我们应该进行自动化测试的许多重要原因之一: 您可以更快地对代码进行增量更新。ROS 有数百个包,具有许多相互依赖关系,因此很难预见一个小变化可能引起的问题。如果您的更改通过了单元测试&#xf…

语言主要是一种交流工具,而不是思维工具?GPT5何去何从?

引言 在人工智能领域,特别是大语言模型(LLM)的发展中,语言和思维的关系一直是一个备受关注的话题。近期,麻省理工学院(MIT)在《Nature》杂志上发表了一篇题为《Language is primarily a tool f…

Unity踩坑之RectTransformUtility.ScreenPointToLocalPointInRectangle

此方法会将屏幕坐标点转换为UI的本地坐标点,即UI子物体相对于父物体的相对位置。不过值得注意的是:当父物体的锚点不在中心时,可能比较麻烦,因为UI的本地坐标是相对于父物体的锚点来计算的。 RectTransformUtility.ScreenPointToL…

linux进程——概念理解与PCB

前言:本篇讲解Linux进程概念相关内容。 操作系统被称为计算机世界的哲学, 可以见得操作系统的知识并不好理解。 对于这篇进程概念的讲解, 博主认为, 如果没有一些前置知识的话,里面的有些概念并不好理解。 但是如果学习…