Java中IO流 RandomAccessFile类实例详解

 更新时间:2017年05月14日 15:15:40   投稿:lqh  
这篇文章主要介绍了Java中IO流 RandomAccessFile类实例详解的相关资料,需要的朋友可以参考下

Java中IO流 RandomAccessFile类实例详解

RandomAccessFile

  1. java提供的对文件内容的访问,既可以读文件,也可以写文件。
  2. 支持随机访问文件,可以访问文件的任意位置。
  3. java文件模型,在硬盘上的文件是byte byte byte存储的,是数据的集合
  4. 打开文件,有两种模式,“rw”读写、“r”只读;RandomAccessFile raf = new RandomAccessFile(file, "rw");,文件指针,打开文件时指针在开头 point = 0;
  5. 写方法, raf.write()-->只写一个字节(后八位),同时指针指向下一个位置,准备再次写入
  6. 读方法,int b = raf.read()-->读一个字节
  7. 文件读写完成以后一定要关闭(Oracle官方说明)

 RafDemo.java

package com.test.io;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;

public class RafDemo {

  public static void main(String[] args) throws IOException {
    File demo = new File("demo");
    if (!demo.exists()) {
      demo.mkdir();
    }
    File file = new File(demo, "raf.dat");
    if (!file.exists()) {
      file.createNewFile();
    }
    RandomAccessFile raf = new RandomAccessFile(file, "rw");
    System.out.println(raf.getFilePointer());
    
    raf.write('A');//一个char型占两个字节,但是write一次只写入一个字节(A字符的后八位)
    System.out.println(raf.getFilePointer());
    raf.write('B');
    
    int i = 0x7fffffff;
    raf.write(i >>> 24);//写入i的高八位
    raf.write(i >>> 16);
    raf.write(i >> 8);
    raf.write(i);
    System.out.println(raf.getFilePointer());
    //直接写入一个int
    raf.writeInt(i);
    
    String s = "你";
    byte[] b = s.getBytes("utf8");
    raf.write(b);
    System.out.println(raf.length());
    
    //读文件,必须把指针移到头部
    raf.seek(0);
    //一次性读取,把文件中的内容都读到字节数组中
    byte[] buf = new byte[(int) raf.length()];
    raf.read(buf);
    System.out.println(Arrays.toString(buf));
    for (byte c : buf) {
      System.out.print(Integer.toHexString(c & 0xff) + " ");
    }
    //关闭文件
    raf.close();
  }

}

  执行结果:

0
1
6
13
[65, 66, 127, -1, -1, -1, 127, -1, -1, -1, -28, -67, -96]
41 42 7f ff ff ff 7f ff ff ff e4 bd a0 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • logback的ShutdownHook关闭原理解析

    logback的ShutdownHook关闭原理解析

    这篇文章主要为大家介绍了logback的ShutdownHook关闭原理源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • java简明例举讲解泛型

    java简明例举讲解泛型

    这篇文章主要介绍了Java的泛型,针对利用继承来实现通用程序设计所产生的问题,泛型提供了更好的解决方案,需要的朋友可以参考一下
    2022-04-04
  • 浅析Java.IO输入输出流 过滤流 buffer流和data流

    浅析Java.IO输入输出流 过滤流 buffer流和data流

    这篇文章主要介绍了Java.IO输入输出流 过滤流 buffer流和data流的相关资料,本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • Java单例模式和多例模式实例分析

    Java单例模式和多例模式实例分析

    这篇文章主要介绍了Java单例模式和多例模式,结合实例形式分析了java单例模式与多例模式的定义及使用技巧,需要的朋友可以参考下
    2019-07-07
  • 基于Java实现的大乐透号码生成器工具类

    基于Java实现的大乐透号码生成器工具类

    大乐透是中国体育彩票的一种玩法,是国家体育总局体彩中心为适应市场发展需要。本文为大家准备了一个大乐透号码生成器工具类,感兴趣的可以了解一下
    2022-08-08
  • Mybatis往Mapper.xml文件中传递多个参数问题

    Mybatis往Mapper.xml文件中传递多个参数问题

    这篇文章主要介绍了Mybatis往Mapper.xml文件中传递多个参数问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • SpringBoot整合mybatis常见问题(小结)

    SpringBoot整合mybatis常见问题(小结)

    这篇文章主要介绍了SpringBoot整合mybatis常见问题(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • spring学习JdbcTemplate数据库事务管理

    spring学习JdbcTemplate数据库事务管理

    这篇文章主要为大家介绍了spring学习JdbcTemplate数据库事务管理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • SpringBoot统一功能处理示例详解(拦截器)

    SpringBoot统一功能处理示例详解(拦截器)

    这篇文章主要介绍了SpringBoot统一功能处理(拦截器),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • maven为MANIFEST.MF文件添加内容的方法

    maven为MANIFEST.MF文件添加内容的方法

    这篇文章主要介绍了maven为MANIFEST.MF文件添加内容的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12

最新评论