博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中随机存取文件流:RandomAccessFile
阅读量:3964 次
发布时间:2019-05-24

本文共 2815 字,大约阅读时间需要 9 分钟。

1.随机存取文件流:

RandomAccessFile

2.使用说明:

  • 1.RandomAccessFile直接继承于java.lang.Object类,实现了DataInput和DataOutput接口

  • 2.RandomAccessFile既可以作为一个输入流,又可以作为一个输出流

  • 3.如果RandomAccessFile作为输出流时,写出到的文件如果不存在,则在执行过程中自动创建。 如果写出到的文件存在,则会对原文件内容进行覆盖。(默认情况下,从头覆盖

  • 4.可以通过相关的操作,实现RandomAccessFile“插入”数据的效果

3.代码举例

典型代码1:

/*图片的复制: */@Testpublic void test1() {
RandomAccessFile raf1 = null; RandomAccessFile raf2 = null; try {
raf1 = new RandomAccessFile(new File("灿烈.jpg"), "r"); raf2 = new RandomAccessFile(new File("灿烈1.jpg"), "rw"); byte[] buffer = new byte[20]; int len; while ((len = raf1.read(buffer)) != -1) {
raf2.write(buffer, 0, len); } } catch (IOException e) {
e.printStackTrace(); } finally {
if (raf2 != null) {
try {
raf2.close(); } catch (IOException e) {
e.printStackTrace(); } } if (raf1 != null) {
try {
raf1.close(); } catch (IOException e) {
e.printStackTrace(); } } }}

典型代码2:

/*   使用RandomAccessFile实现数据的插入效果    */    @Test    public void test3() {
RandomAccessFile raf = null; ByteArrayOutputStream baos = null; try {
// abcdefg// hijk// lmn raf = new RandomAccessFile("hello.txt", "rw"); raf.seek(3);//将指针调到角标为3的位置 //保存指针3后面的所数据到StringBuilder中 // StringBuilder sb = new StringBuilder((int)new File("hello.txt").length()); baos = new ByteArrayOutputStream(); byte[] buffer = new byte[5]; int len; while((len = raf.read(buffer)) != -1){
// sb.append(new String(buffer,0,len)); //将字节5个5个写入,不会出现乱码,最后再一起转成字符串 baos.write(buffer,0,len); } //调回指针,写入“xyz” raf.seek(3); raf.write("xyz".getBytes()); //将StringBuilder中的数据写入到文件中 // raf.write(sb.toString().getBytes()); raf.write(baos.toString().getBytes());// abcxyzdefg// hijk// lmn } catch (IOException e) {
e.printStackTrace(); } finally {
if (raf != null) {
try {
raf.close(); } catch (IOException e) {
e.printStackTrace(); } } if(baos != null){
try {
baos.close(); } catch (IOException e) {
e.printStackTrace(); } } } //思考:将StringBuilder替换为ByteArrayOutputStream }

ByteArrayOutputStream

字节数组输出流在内存中创建一个字节数组缓冲区,所有发送到输出流的数据保存在该字节数组缓冲区中。
详细知识:

转载地址:http://xvuki.baihongyu.com/

你可能感兴趣的文章
NET - .NET Core WebAPI + Vue + Axios 导出Excel / CSV
查看>>
NET - NET Core Quartz.net开源作业调度框架使用详解
查看>>
NET - NET Core quartz.net 时间表达式----- Cron表达式详解
查看>>
NET - .NET Core 之 Abp Audit-Logging
查看>>
NET - .NET Core 之 Abp AuditLog 将不同的Controller实体的审计日志存储到不同的Table
查看>>
NET - .NET Core 之 Azure Key Vault 密钥保管库的使用
查看>>
NET - .NET Core 之 Abp 整合 Quartz
查看>>
Docker - Docker Desktop(WSL2)修改镜像存储位置
查看>>
NET - NET Core使用Log4net的SqlServer AdoNetAppender 报程序集错误
查看>>
NET - NET Core中使用Log4net输出日志到数据库中去
查看>>
NET - NET Core 迁移nuget包缓存到指定位置
查看>>
Spring - SpringBoot 集成 swagger2
查看>>
SQL - 深入理解MySQL索引之B+Tree
查看>>
SQL - 数据库索引原理,及MySQL索引类型
查看>>
Spring - Dubbo的实现原理
查看>>
Spring - Dubbo 扩展点详解
查看>>
Spring - Hystrix原理与实战
查看>>
Spring - Sentinel 原理 全解析
查看>>
Spring - 比较Sentinel和Hystrix
查看>>
Spring - Nacos 服务注册与发现原理分析
查看>>