RandomAccessFile详解

简介: 此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。

      此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。

      通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException(是一种 IOException)。如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException,而不是 EOFException。需要特别指出的是,如果流已被关闭,则可能抛出 IOException

构造方法:

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

public class Main {
    public static void main(String[] args) throws Exception {
        // 1
        RandomAccessFile randomAccessFile = new RandomAccessFile("hello.txt","rw") ;
        // 2
        File file = new File("hello.txt");
        RandomAccessFile randomAccessFile1 = new RandomAccessFile(file,"rw") ; 
    }
}

方法摘要:

  close()    关闭RandomAccessFile实例打开的文件。

1 import java.io.RandomAccessFile;
2 
3 public class Main {
4     public static void main(String[] args) throws Exception { 
5         RandomAccessFile randomAccessFile = new RandomAccessFile("hello.txt","rw") ;
6         randomAccessFile.close();
7     }
8 }

  seek()     文件指针移动。

 1 import java.io.RandomAccessFile;
 2 
 3 public class Main {
 4     public static void main(String[] args) throws Exception {
 5         RandomAccessFile randomAccessFile = new RandomAccessFile("hello.txt","rw") ;
 6         // seek 参数为 long 
 7         long w = 100 ;
 8         randomAccessFile.seek(w);
 9         randomAccessFile.close();
10     }
11 }

  length()  文件长度

1 import java.io.RandomAccessFile;
2 
3 public class Main {
4     public static void main(String[] args) throws Exception {
5         RandomAccessFile randomAccessFile = new RandomAccessFile("hello.txt","rw") ;
6         long len = randomAccessFile.length();
7         randomAccessFile.close();
8     }
9 }

    读取:

    read()
    read(byte[] b)
    read(byte[] b,int off,int len)

    readLine()

    readBoolean()

    readDouble()

    readFloat()

    readByte()

    readChar()

 

  写入: 
    write(byte []b)
    write(byte []b,int off,int len)

    write(int b)

    writeBoolean(boolean v) 

    writeByte(int v)

    writeBytes(String s)

    writeChar(int v) 

    writeChars(String s)

    writeDouble(double v)

    writeFloat(float v)

    writeInt(int v)

    writeLong(long v)

    writeShort(int v)

    writeUTF(String str)

 : RandomAccessFile可利用多线程完成对一个大文件的读写,利用seek对文件进行切分,从大文件的不同位置开线程进行读写。

 

目录
相关文章
|
8月前
|
机器学习/深度学习 人工智能 测试技术
IMAGPose:南理工突破性人体生成框架!多姿态适配+细节语义融合,刷新图像生成范式
IMAGPose 是南京理工大学推出的用于人体姿态引导图像生成的统一条件框架,解决了传统方法在姿态引导的人物图像生成中的局限性,支持多场景适应、细节与语义融合、灵活的图像与姿态对齐以及全局与局部一致性。
206 0
|
10月前
|
Python
探索Python虚拟环境:virtualenv、venv与pipenv比较
在Python开发中,有效的环境管理至关重要。virtualenv、venv和pipenv是常用的虚拟环境管理工具。virtualenv支持Python 2.7+和3.3+,可创建独立环境;venv为Python 3.3+内置库,简单轻量但功能有限;pipenv则结合了包管理和虚拟环境管理,生成Pipfile.lock确保依赖确定性和安全性,推荐作为首选工具。
382 2
|
消息中间件 资源调度 关系型数据库
如何在Flink on YARN环境中配置Debezium CDC 3.0,以实现实时捕获数据库变更事件并将其传输到Flink进行处理
本文介绍了如何在Flink on YARN环境中配置Debezium CDC 3.0,以实现实时捕获数据库变更事件并将其传输到Flink进行处理。主要内容包括安装Debezium、配置Kafka Connect、创建Flink任务以及启动任务的具体步骤,为构建实时数据管道提供了详细指导。
605 9
|
数据采集 Web App开发 存储
Python-数据爬取(爬虫)
【7月更文挑战第24天】
271 7
|
Java Maven Android开发
springboot启动错误: 找不到或无法加载主类
当在eclipse启动spring boot项目时出现问题: springboot错误: 找不到或无法加载主类
|
存储 Linux C语言
【linux进程控制(一)】进程终止--如何干掉一个进程?
【linux进程控制(一)】进程终止--如何干掉一个进程?
|
图形学 开发者
【unity小技巧】两种办法解决FPS游戏枪或者人物穿墙穿模问题
【unity小技巧】两种办法解决FPS游戏枪或者人物穿墙穿模问题
971 0
|
Windows
pywinauto windows桌面应用自动化
桌面应用程序自动化
46764 20
|
存储 人工智能 算法
Unity 实现A* 寻路算法
Unity 实现A* 寻路算法
704 2
Unity 实现A* 寻路算法
|
算法
基于瑞丽多径信道的无线通信信道均衡算法matlab仿真,对比MMSE,ZF-DFE,MMSE-DFE
基于瑞丽多径信道的无线通信信道均衡算法matlab仿真,对比MMSE,ZF-DFE,MMSE-DFE
500 6
下一篇
oss云网关配置