首页 > 编程语言 >第一百六十四节 Java IO教程 - Java随机访问文件

第一百六十四节 Java IO教程 - Java随机访问文件

时间:2024-07-15 21:58:36浏览次数:19  
标签:raf 文件 Java 访问 写入 第一百六十四 fileName RandomAccessFile IO

Java IO教程 - Java随机访问文件

使用随机访问文件,我们可以从文件读取以及写入文件。

使用文件输入和输出流的读取和写入是顺序过程。

使用随机访问文件,我们可以在文件中的任何位置读取或写入。

RandomAccessFile类的一个对象可以进行随机文件访问。我们可以读/写字节和所有原始类型的值到一个文件。

RandomAccessFile可以使用其readUTF()和writeUTF()方法处理字符串。

RandomAccessFile类不在InputStream和OutputStream类的类层次结构中。

模式

可以在四种不同的访问模式中创建随机访问文件。访问模式值是一个字符串。它们列出如下:

模式含义
"r"文件以只读模式打开。
"rw"该文件以读写模式打开。 如果文件不存在,则创建该文件。
"rws"该文件以读写模式打开。 对文件的内容及其元数据的任何修改立即被写入存储设备。
"rwd"该文件以读写模式打开。 对文件内容的任何修改立即写入存储设备。

读和写

我们通过指定文件名和访问模式来创建RandomAccessFile类的实例。

RandomAccessFile  raf = new RandomAccessFile("randomtest.txt", "rw");

随机访问文件具有文件指针,当我们从其读取数据或向其写入数据时,该文件指针向前移动。

文件指针是我们下一次读取或写入将开始的光标。

其值指示光标与文件开头的距离(以字节为单位)。

我们可以通过使用其getFilePointer()方法来获取文件指针的值。

当我们创建一个RandomAccessFile类的对象时,文件指针被设置为零。

我们可以使用seek()方法将文件指针设置在文件中的特定位置。

RandomAccessFile的length()方法返回文件的当前长度。我们可以通过使用其setLength()方法来扩展或截断文件。

例子

以下代码显示如何使用RandomAccessFile对象读取和写入文件。

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

public class Main {
  public static void main(String[] args) throws IOException {
    String fileName = "randomaccessfile.txt";
    File fileObject = new File(fileName);

    if (!fileObject.exists()) {
      initialWrite(fileName);
    }
    readFile(fileName);
    readFile(fileName);
  }

  public static void readFile(String fileName) throws IOException {
    RandomAccessFile raf = new RandomAccessFile(fileName, "rw");
    int counter = raf.readInt();
    String msg = raf.readUTF();

    System.out.println(counter);
    System.out.println(msg);
    incrementReadCounter(raf);
    raf.close();
  }

  public static void incrementReadCounter(RandomAccessFile raf)
      throws IOException {
    long currentPosition = raf.getFilePointer();
    raf.seek(0);
    int counter = raf.readInt();
    counter++;
    raf.seek(0);
    raf.writeInt(counter);
    raf.seek(currentPosition);
  }

  public static void initialWrite(String fileName) throws IOException {
    RandomAccessFile raf = new RandomAccessFile(fileName, "rw");
    raf.writeInt(0);
    raf.writeUTF("Hello world!");
    raf.close();
  }
}

上面的代码生成以下结果。

标签:raf,文件,Java,访问,写入,第一百六十四,fileName,RandomAccessFile,IO
From: https://blog.csdn.net/2301_78772942/article/details/140450248

相关文章

  • 第一百六十五节 Java IO教程 - Java标准输入/输出/错误流
    JavaIO教程-Java标准输入/输出/错误流我们可以使用System.out和System.err对象引用,只要我们可以使用OutputStream对象。我们可以使用System.in对象,只要我们可以使用InputStream对象。System类提供了三个静态设置器方法setOut(),setIn()和setErr(),以用您自己的设备替换这......
  • Javase-5.逻辑控制的习题
    1.根据年龄,来打印出当前年龄的人是少年(低于18),青年(19-28),中年(29-55),老年(56以上)Scannersc=newScanner(System.in);intage=sc.nextInt();if(age>0&&age<=18){System.out.println("是少年");}elseif(age>=19&&......
  • Java中的序列化与反序列化
    序列化与反序列化的定义序列化(Serialization)与反序列化(Deserialization)是编程中常见的两个概念,它们主要涉及到将数据结构或对象状态转换为可以存储或传输的格式,以及将存储或传输的格式转换回原始的数据结构或对象状态的过程。这两个过程在数据持久化、网络通信、对象深拷......
  • Java进度1
    一、IDEA1、成功下载IDEA,学会如何建立项目、模块、包及类2、在IDEA中成功运行第一个代码,如下:二、算术运算符与转换1、算术运算符的认识(+-*/%)以及简单练习需要注意的是//整数计算只能得出整数//有小数参与计算得出的结果可能不精确,如下图得出:2、隐式转换:取值范围小......
  • 介绍自动驾驶的感知任务--3D Occupancy Semantic Prediction
    介绍自动驾驶感知任务中的--3DOccupancySemanticPrediction什么是Occupancy自动驾驶领域,按照传统会分为perception,prediction,planning和control四大部分,有时会加上map。其中最为重要的就是perception,也是目前自动驾驶的瓶颈所在,如果感知算法给了下游任务错误的视觉信息,......
  • Java语言程序设计——篇四(1)
    类和对象面向对象概述面向过程与面向对象面向对象基本概念面向对象的基本特征面向对象的优势及应用为对象定义类类的修饰符成员变量成员变量-修饰符构造方法⭐️成员方法成员方法-修饰符例题讲解⚠️理解栈和堆面向对象概述两种程序设计方法结构化程序设计,典型代表......
  • Java语言程序设计——篇四(2)
    类和对象方法设计定义和使用方法访问方法和修改方法方法的调用方法参数的传递✨方法重载✨构造方法(构造器)......
  • [深入理解Java虚拟机]线程
    状态转换Java语言定义了6种线程状态,在任意一个时间点中,一个线程只能有且只有其中的一种状态,并且可以通过特定的方法在不同状态之间转换。这6种状态分别是:新建(New):创建后尚未启动的线程处于这种状态,运行(Runnable):包括操作系统线程状态中的Running和Ready,也就是处于此状态......
  • The 2022 ICPC Asia Shenyang Regional Contest
    Preface本来以为今天有多校的,但到了机房发现并没有,索性就随便找了场比赛VP了然后经典开场三线红温,签了3个题后徐神被一个string关住了(后面发现他犯了个极其弱智的错误导致坐牢一整场),祁神被构造F关了,然后我写A的分类讨论写的很红温中间排名一度经典俯冲铁牌区,但好在最后......
  • asyncio/trio fastdfs python client
    Codets.py#!/usr/bin/envpython"""FastDFS并发测试脚本Usage::$python<me>.py200--show"""importfunctoolsimportitertoolsimportjsonimportosimportpickleimportsysimporttimefrompathlibimportPathfr......