【Java】IO ---- RandomAccessFile

内容目录

  • 概述
  • 4种模式
  • 如何随机访问一部分数据
  • 如何在指定位置追加一段数据

概述
RandomAccessFile ----- 自由访问文件任意位置
1、概念:RandomAccessFile是直接继承Object的独立的类,是用来访问那些保存数据记录的文件的,用seek( )方法来进行读写了。
public RandomAccessFile(String name, String mode)
2、方法

  • file poniter — 文件指针 用来标记当前读取或写入的位置
  • getFileponiter()— 返回当前文件指针的位置
  • seek() — 设置当前文件指针的位置

4种模式

  • r:只读模式
  • rw:支持读取和写入
  • rws:支持读取和写入,同时当我们修改文件内容和文件的元数据都会直接同步到存储设备上
  • rwd:支持读取和写入,同时当我们修改文件内容会直接同步到存储设备上

PS:文件的元数据是什么?
文件的大小,访问权限,包括本身一些属性信息

随机访问文件中的某一部分数据

    RandomAccessFile file = null;
        try {
            file = new RandomAccessFile("a.txt", "r");

            file.seek(50);
            System.out.println(file.getFilePointer());

            byte[] bytes = new byte[256];
            int hasRead = file.read(bytes);
            System.out.println(new String(bytes, 0, hasRead));

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

在指定位置去追加一段数据
PS:RandomAccessFile不能在任意位置去追加数据

public static void main(String[] args) {
        RandomAccessFile raf = null;
        File file = null;
        FileOutputStream fos = null;
        FileInputStream fis = null;

        try {
            //创建临时文件
            File.createTempFile("test.txt", null);

            //创建输入、输出流
            fis = new FileInputStream("test.txt");
            fos = new FileOutputStream("test.txt");

            //创建RandomAccessFile对象
            raf = new RandomAccessFile("a.txt", "rw");
            //移动文件指针
            raf.seek(50);

            //读取该位置之后的数据,并把它写入到临时文件里
            byte[] bytes = new byte[256];
            int hasRead = 0;
            while((hasRead = raf.read(bytes)) != -1){
                fos.write(bytes, 0,  hasRead);
            }

            //移动文件指针
            raf.seek(50);
            //往文件中指定位置追加内容
            raf.write("tulun software company".getBytes());

            //追加文件
            while((hasRead = fis.read(bytes)) != -1){
                raf.write(bytes, 0 , hasRead);
            }
            
             } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                raf.close();
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值