【Java】Input,Output,Stream I/O流 05 RandomAccessFile 随机访问文件类
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 随机访问文件类的更多相关文章
- Java基础-IO流对象之随机访问文件(RandomAccessFile)
Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...
- Java I/O(三)各种Reader和Writer读写器、RandomAccessFile随机访问文件、序列化
2019 01/01 八.Reader和Writer读写器 前面讲的输入输出流的基本单位都是字节,因此可以称为“字节流”,读写器是以字符为基本单位,可以称为“字符流”.它们的使用方法非常相似,因此我考 ...
- 18 IO流(十五)——RandomAccessFile随机访问文件及使用它进行大文件切割的方法
本文部分内容转自:https://blog.csdn.net/nightcurtis/article/details/51384126 1.RandomAccessFile特点 RandomAcces ...
- Java开发笔记(八十七)随机访问文件的读写
前面介绍了字符流读写文件的两种方式,包括文件字符流和缓存字符流,但是它们的写操作都存在一个问题:不管是write方法还是append方法,都只能从文件开头写入,而不能追加到文件末尾或者在文件中间某个位 ...
- Java API —— IO流(数据操作流 & 内存操作流 & 打印流 & 标准输入输出流 & 随机访问流 & 合并流 & 序列化流 & Properties & NIO)
1.操作基本数据类型的流 1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出 ...
- Java IO详解(六)------随机访问文件流
File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...
- JAVA之旅(三十)——打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码
JAVA之旅(三十)--打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码 三十篇了,又是一个 ...
- Java IO详解(七)------随机访问文件流
File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...
- Java中有几种类型的流?以及常见的实现类都有哪些?
Java中有几种类型的流?以及常见的实现类都有哪些? 首先应该从两个角度来看: 从输入输出方面来讲: Java中有输入流和输出流 从流的编码方式上来讲: Java中有字节流和字符流 ...
- [19/04/03-星期三] IO技术_其它流(RandomAccessFile 随机访问流,SequenceInputStream 合并流)
一.RandomAccessFile 随机访问流 [版本1] /* *RandomAccessFile 所谓随机读取就是 指定位置开始或指定位置结束 的读取写入文件 * 实现文件的拆分与合并 模拟下载 ...
随机推荐
- GNU gprof分析C性能
参考 gprof的简单使用-anthony1983-ChinaUnix博客 Top (GNU gprof) (sourceware.org) c - Enable and disable gprof ...
- 无需搭建环境,零门槛带你体验Open-Sora文生视频应用
本文分享自华为云社区<Open-Sora 文生视频原来在AI Gallery上也能体验了>,作者:码上开花_Lancer. 体验链接:Open-Sora 文生视频案例体验 不久前,Open ...
- 2023 Hive 面试大纲
先说一些废话 总结一下Hive面试宝典中的要点,方便读者快速过一遍Hive面试所需要的知识点. 本文请搭配 Hive面试宝典 来食用更美味哟 ┗( ▔, ▔ )┛ 方便自己系统性回忆,根据*的数量来标 ...
- NCNN的内存显存分配器ncnn::Allocator & ncnn::VkAllocator翻译及其差异对比的学习笔记(nihui亲审过滴)
NCNN的内存分配器 ncnn::Allocator 通用内存分配器 ncnn::PoolAllocator 内存池分配器 可以设置池大小,减少分配内存和析构内存次数,空间换时间 ncnn:: ...
- macbookrpro使用体验
前言 之前用的电脑是拯救者y7000 2020,用了四五年,年前就有换电脑的打算.计划就是买一个苹果电脑,在查看了挺多电脑,多方面对比后,最终还是买了Macbook pro. 我买的笔记本的配置如下: ...
- minos 2.1 中断虚拟化——ARMv8 异常处理
首发公号:Rand_cs 越往后,交叉的越多,大多都绕不开 ARMv8 的异常处理,所以必须得先了解了解 ARMv8 的异常处理流程 先说一下术语,从手册中的用词来看,在 x86 平台,一般将异常和中 ...
- vs 启动时报错:未能加载文件或程序集 SharpGit
错误完整内容: ---------------------------Microsoft Visual Studio---------------------------System.Reflecti ...
- 地铁查询app 结对作业三
经过今天一下午的奋斗 安卓app 只剩下最难的部分了 最短路径问题 我们考虑用迪杰斯特拉算法 不过 没有做出来 还要继续去学习一下这个代码 并寻求网上代码的帮助
- CSV文件存储
CSV 文件存储 CSV,全称为 Comma-Separated Values,中文可以叫作逗号分隔值或字符分隔值,其文件以纯文本形式存储表格数据.该文件是一个字符序列,可以由任意数目的记录组成,记录 ...
- 洛谷 P4343 自动刷题机
题目链接:自动刷题机 思路 二分典题,两个二分判断出可能的最大值和最小值.需要注意当删掉y行代码后,当前代码行数小于0时需要将代码行数重新赋值为0,然后需要注意二分的n最大值的边界,因为x[i]的最大 ...