RandomAccessFile 随机访问文件类

直接继承java.lang.Object 实现DataInput & DataOutput 接口

即是输入流,也是输出流

public class RandomAccessFileTest {
public static void main(String[] args) throws Exception {
// mode的四个参数
// r 只读方式打开 不创建文件,读取一个已存在的文件,文件不存在则抛出异常
// rw 打开读取和写入 不存在文件则创建,反之直接读取和写入
// rwd 读取和写入 + 同步内容更新
// rws 读取和写入 + 同步内容 & 元数据 的更新
RandomAccessFile raf1 = new RandomAccessFile(new File("1774415.jpg"),"rws");
RandomAccessFile raf2 = new RandomAccessFile(new File("raf2.jpg"),"rws"); byte[] bytesBuffer = new byte[1024];
int len;
while ((len = raf1.read(bytesBuffer)) != -1){
raf2.write(bytesBuffer,0,len);
} raf1.close();
raf2.close();
}
}

- 作为输出流时,直接覆写文件,没有文件存在创建文件写入,文件存在且已有内容从头覆盖写入

- 如果要实现插入覆写,可在编写之前,调用 void seek(int index) 方法 设置指针在文件种写入的位置

- 要在已有内容的基础上追加写入,就要把指针移动到最后一位,最后一位就是File对象的字节长度,file.Length()的位置即可

- 实现插入写入

  1、先从插入位置读取后面的数据,保存下来

  2、指针此时在最后的位置,我们需要拨回指针位置到原来的插入位置上

  3、调用seek方法,再开始覆写操作,

  4、再把1保存的数据执行覆写

    static void insert() throws Exception {
RandomAccessFile raf = new RandomAccessFile("sample.txt","rws"); raf.seek(2); // 拨动指针到指定位置 // 设置一个字符串的缓冲类,用于保存我们读取的内容,长度不会超过这个文件的字节长度
StringBuilder stringBuilder = new StringBuilder((int)new File("sample.txt").length()); byte[] bytesBuffer = new byte[5];
int len;
while ( (len = raf.read(bytesBuffer)) != -1){
// 采用追加方法写进字符串缓冲对象
stringBuilder.append(raf.read(bytesBuffer,0,len));
} // 拨回指针
raf.seek(4); // 插入我们需要的数据内容
raf.write("这是我们插入进去的数据".getBytes()); // 再写入之前保存的数据
raf.write(stringBuilder.toString().getBytes()); // 释放
raf.close();
}

功能实现了,但是还是乱码....暂时未解决

关于新IO的介绍  https://www.bilibili.com/video/BV1Kb411W75N?p=618

在后面继续学习

【Java】Input,Output,Stream I/O流 05 RandomAccessFile 随机访问文件类的更多相关文章

  1. Java基础-IO流对象之随机访问文件(RandomAccessFile)

    Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...

  2. Java I/O(三)各种Reader和Writer读写器、RandomAccessFile随机访问文件、序列化

    2019 01/01 八.Reader和Writer读写器 前面讲的输入输出流的基本单位都是字节,因此可以称为“字节流”,读写器是以字符为基本单位,可以称为“字符流”.它们的使用方法非常相似,因此我考 ...

  3. 18 IO流(十五)——RandomAccessFile随机访问文件及使用它进行大文件切割的方法

    本文部分内容转自:https://blog.csdn.net/nightcurtis/article/details/51384126 1.RandomAccessFile特点 RandomAcces ...

  4. Java开发笔记(八十七)随机访问文件的读写

    前面介绍了字符流读写文件的两种方式,包括文件字符流和缓存字符流,但是它们的写操作都存在一个问题:不管是write方法还是append方法,都只能从文件开头写入,而不能追加到文件末尾或者在文件中间某个位 ...

  5. Java API —— IO流(数据操作流 & 内存操作流 & 打印流 & 标准输入输出流 & 随机访问流 & 合并流 & 序列化流 & Properties & NIO)

    1.操作基本数据类型的流     1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出 ...

  6. Java IO详解(六)------随机访问文件流

    File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...

  7. JAVA之旅(三十)——打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码

    JAVA之旅(三十)--打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码 三十篇了,又是一个 ...

  8. Java IO详解(七)------随机访问文件流

    File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...

  9. Java中有几种类型的流?以及常见的实现类都有哪些?

    Java中有几种类型的流?以及常见的实现类都有哪些? 首先应该从两个角度来看: 从输入输出方面来讲:       Java中有输入流和输出流 从流的编码方式上来讲:    Java中有字节流和字符流 ...

  10. [19/04/03-星期三] IO技术_其它流(RandomAccessFile 随机访问流,SequenceInputStream 合并流)

    一.RandomAccessFile 随机访问流 [版本1] /* *RandomAccessFile 所谓随机读取就是 指定位置开始或指定位置结束 的读取写入文件 * 实现文件的拆分与合并 模拟下载 ...

随机推荐

  1. 记录nodejs做编辑和新增时候对数据库的操作

    server.js文件 const dao = require("../dao/user.dao"); saveDat是个对象自己处理一下 if (updataFlag) {//编 ...

  2. 对于 EI K 逆序对排列计数的另一种自然求和方法的理解

    有一个简单的 \(O(n^3)\) DP,考虑 \(f_{x + 1, k} = \sum_{j = 0}^{x} f_{x, k - j}\),利用前缀和优化即可. 考虑这实际上是 \(f_{x + ...

  3. java.io.File类中分隔符区别

    1.separator File.separator是系统默认的文件分隔符号,在UNIX系统上,这个字段的值是'/';在Microsoft Windows系统上,它是''. 类型:String 2.s ...

  4. windows 开发者注册后写代码,这个给钱吗?

  5. 三维API sheder 基础

    这个shader 是靠三维数学 影响 二维像素 导致像素颜色改变 它是每个像素走一遍脚本算法 写的时候注意 语言格式 写错了 shader脚本是不能用的,根本就不好使这个 可以用区域 用xyz y为0 ...

  6. 燕千云 YQCloud 数智化业务服务平台 发布1.12版本

    2022年4月29日,燕千云 YQCloud 数智化业务服务平台发布1.12版本,优化客户服务场景.深化智能预测服务的应用,加强系统在多渠道方面的集成,全面提升企业数智化服务的能力! 作为企业数字化服 ...

  7. 使用嵌套的ScriptableObject及ReorderableList创建习题持久化数据

    使用嵌套的ScriptableObject及ReorderableList创建习题持久化数据 效果展示 题集持久化数据:存储题目,可以直接在inspector面板上创建对应的问题子项 问题持久化数据 ...

  8. QMS质量管理系统:打造企业质量控制的新纪元

    在当今竞争激烈的市场环境下,产品质量是决定企业生存与发展的关键因素之一.为了确保从设计到交付的每一步都符合最高标准,一套高效.全面的质量管理系统(Quality Management System, ...

  9. Python 压缩PDF减小文件大小

    压缩 PDF 文件能有效减小文件大小并提高文件传输的效率,同时还能节省计算机存储空间.除了使用一些专业工具对PDF文件进行压缩,我们还可以通过 Python 来执行该操作,实现自动化.批量处理PDF文 ...

  10. 高通LCD开发常见问题&分析

    reference : https://blog.csdn.net/sinat_34606064/article/details/77921323 https://www.cnblogs.com/bi ...