Java-IO流系列-随机存取文件流
2021/6/27 12:14:32
本文主要是介绍Java-IO流系列-随机存取文件流,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
随机存取文件流
简介
-
RandomAccessFile声明在java.io包下, 但直接继承于java.lang.Object类。 并且它实现了Datalnput. DataOutput这两 个接口,也就意味着这个类既可以读也可以写。
-
RandomAccessFile类支持“随机访问"的方式,程序可以直接跳到文件的任意地方来读、写文件
- 支持只访间文件的部分内容
- 可以向已存在的文件后追加内容
-
RandomAccessFile对象包含一个记录指针,用以标示当前读写处的位置。
-
RandomAccessFile类对象可以自由移动记录指针:
- long getFilePointer(): 获取文件记录指针的当前位置
- void seek(long pos): 将文件记录指针定位到pos位置
构造器
- public RandomAccessFile(File file, String mode)
- public RandomAccessFile(String name, String mode)
创建RandomAccessFile类实例需要指定一个mode参数,该参数指定RandomAccessFile的访问模式:
- r:以只读方式打开
- rw:打开以便读取和写入
- rwd:打开以便读取和写入;同步文件内容的更新
- rws:打开以便读取和写入:同步文件内容和元数据的更新
如果模式为只读r。则不会创建文件,而是会去读取一个已经存在的文件,如果读取的文件不存在则会出现异常。 如果模式为w读写。如果文件不存在则会去创建文件,如果存在则不会创建。
样例
复制文件
package com.dreamcold.io; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; public class Demo20 { public static void main(String[] args) throws IOException { RandomAccessFile raf1= new RandomAccessFile(new File("image.jpg"),"r"); RandomAccessFile raf2= new RandomAccessFile(new File("image4.jpg"),"rw"); byte[] buffer=new byte[1024]; int len; while((len=raf1.read(buffer))!=-1){ raf2.write(buffer,0,len); } raf1.close(); raf2.close(); } }
效果:
![image-20210119165133196](/upload/202106/27/202106271214318400.png)
写入txt文件
如果RandomaccessFile作为输出流时,写出到的文件如果不存在,则在执行过程中自动创建
如果写出到的文件存在,则会对原有文件内容进行覆盖。|
package com.dreamcold.io; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; public class Demo21 { public static void main(String[] args) throws IOException { RandomAccessFile raf1=new RandomAccessFile("hello1.txt","rw"); raf1.write("dreamcold".getBytes()); raf1.close(); } }
效果:
![image-20210119165436966](/upload/202106/27/202106271214320124.png)
数据插入的效果
可以通过相关的操作,实现RandomAccessFile"插入重据的效果
package com.dreamcold.io; import java.io.IOException; import java.io.RandomAccessFile; public class Demo22 { public static void main(String[] args) throws IOException { RandomAccessFile raf1=new RandomAccessFile("hello1.txt","rw"); //将指针调到角标为3的位置 raf1.seek(3); //保存指针3之后的所有的数据到StringBuilder中 StringBuilder builder=new StringBuilder(); byte[] buffer=new byte[20]; int len; while ((len=raf1.read(buffer))!=-1){ builder.append(new String(buffer,0,len)); } //调回指针写入"xyz" raf1.seek(3); raf1.write("xyz".getBytes()); //将StringBuiler中的数据写入文件 raf1.write(builder.toString().getBytes()); raf1.close(); } }
结果:
这篇关于Java-IO流系列-随机存取文件流的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)