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对文件进行切分,从大文件的不同位置开线程进行读写。

 

目录
相关文章
|
7月前
|
开发者
1688工厂信息接口指南
1688工厂信息接口用于获取供应商基础信息、生产能力及交易信用数据,支持供应链分析与评估。核心功能包括企业信息、生产能力、交易勋章、认证资料等。调用需申请接口权限,配置商品ID与返回字段。
|
11月前
|
机器学习/深度学习 人工智能 测试技术
IMAGPose:南理工突破性人体生成框架!多姿态适配+细节语义融合,刷新图像生成范式
IMAGPose 是南京理工大学推出的用于人体姿态引导图像生成的统一条件框架,解决了传统方法在姿态引导的人物图像生成中的局限性,支持多场景适应、细节与语义融合、灵活的图像与姿态对齐以及全局与局部一致性。
274 0
|
搜索推荐 数据挖掘 大数据
利用CRM系统实现老客户自动化运营与维护策略
在数字化时代,CRM系统成为企业洞察老客户需求、自动化运营和维护的核心工具。通过数据驱动的客户反馈收集、个性化服务与分层管理、自动化营销、客户关怀及忠诚度计划,企业能提升客户满意度与留存率,促进业务增长。CRM系统助力精准分析客户行为,优化营销策略,确保企业长期发展。
|
消息中间件 资源调度 关系型数据库
如何在Flink on YARN环境中配置Debezium CDC 3.0,以实现实时捕获数据库变更事件并将其传输到Flink进行处理
本文介绍了如何在Flink on YARN环境中配置Debezium CDC 3.0,以实现实时捕获数据库变更事件并将其传输到Flink进行处理。主要内容包括安装Debezium、配置Kafka Connect、创建Flink任务以及启动任务的具体步骤,为构建实时数据管道提供了详细指导。
723 9
|
人工智能 搜索推荐
影视与游戏行业AI视频制作实战:第二步,为角色生成个性化语音
每个角色有自己的性格、形象,那也一定需要自己个性化的声音。
|
弹性计算 固态存储 NoSQL
阿里云服务器系统盘和数据盘ESSD Entry、ESSD AutoPL和ESSD云盘区别、性能和价格整理
阿里云服务器系统盘有ESSD Entry、ESSD云盘及ESSD AutoPL三种选择,各自在性能和适用场景上有所不同。ESSD Entry云盘性价比高,适合开发与测试业务;ESSD AutoPL云盘实现容量与性能解耦,支持自定义预配置性能,适用于时延敏感或IO密集型场景;ESSD云盘则提供多种性能级别,适用于大型OLTP数据库和NoSQL数据库等。详情及价格参见阿里云官网。
1142 8
|
Java Maven Android开发
springboot启动错误: 找不到或无法加载主类
当在eclipse启动spring boot项目时出现问题: springboot错误: 找不到或无法加载主类
|
前端开发 容器
前端 css 经典:grid 栅格布局
前端 css 经典:grid 栅格布局
254 1
|
存储 Linux C语言
【linux进程控制(一)】进程终止--如何干掉一个进程?
【linux进程控制(一)】进程终止--如何干掉一个进程?
|
XML Java Android开发
Java学习—Eclipse/Idea如何设置自动提示
Java学习—Eclipse/Idea如何设置自动提示
321 1