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. react自定义导航组件 路由参数

    为何需要自定义导航? 因为在项目中往往不是所有的声明式导航都是需要a标签完成,有时候可能需要别的标签,此时如果在需要的地方去写编程式导航就会有代码重复可能性,就在对于公共代码进行提取. 思路: 定义一 ...

  2. jquery中封装了三种ajax请求方式

          // jQuery中封装了3种 ajax 请求方式         // 1, get请求方式         // 2, post请求方式         // 3, 综合请求方式    ...

  3. 2020年你不可不知的自动化框架,可替代Selenuim的测试框架Top10

    Selenium是一种开源自动测试工具.它可以跨不同的浏览器和平台在Web应用程序上执行功能,回归,负载测试.Slenium是最好的工具之一,但确实有一些缺点. 业界有一些强大的工具可以替代Selen ...

  4. java8 Lambda 测试示例

    import com.google.gson.Gson; import org.junit.Test; import java.util.Arrays; import java.util.IntSum ...

  5. Freertos学习:04-任务的调试函数

    --- title: rtos-freertos-04-任务的调试函数 EntryName: rtos-freertos-04-task-debug date: 2020-06-22 08:49:06 ...

  6. OpenCV程序练习(四):人脸识别

    一.人脸检测 准备图片 代码 import cv2 img=cv2.imread("Faces.jpeg") faceCascade=cv2.CascadeClassifier(' ...

  7. PyTorch程序练习(一):PyTorch实现CIFAR-10多分类

    一.准备数据 代码 import torchvision import torchvision.transforms as transforms from torch.utils.data impor ...

  8. 嵌入式知识分享——GDB程序调试方法说明

    前  言 本指导文档适用开发环境: Windows开发环境:Windows 7 64bit.Windows 10 64bit Linux开发环境:Ubuntu 18.04.4 64bit 虚拟机:VM ...

  9. C#中?.、??、?:、及?等符号用途

    1.可空类型修饰符(?)   众所周知,在C#中引用类型可以使用一个null引用来表示一个不存在的值,比如 string str = null 是正确的: 但是值类型却不能为空,比如 int k = ...

  10. HGAME2023 week1-week2

    确实是高质量比赛,学到了很多知识.认识到了很多的不足. 任重而道远啊... hgame_week1 web Classic Childhood Game F12检查源码,打开Events.js 发现 ...