JAVA之RandomAccessFile的简介与使用

这篇博客介绍了如何利用RandomAccessFile类在Java中实现文件内容的插入操作。首先,校验文件路径和插入位置的合法性,然后创建临时文件用于存储原文件内容。接着,将指针移动到插入位置,读取并写入临时文件,再将插入内容写入目标文件,并将后续内容从临时文件写回。最后,确保所有流被正确关闭。这个方法涉及文件的读写、流操作以及文件指针的管理。
摘要由CSDN通过智能技术生成

RandomAccessFile

RandomAccessFile随机访问文件类提供了更加丰富的对文件的操作形式,相比较之前的流要么读要么写,当前类提供了读写操作。

public RandomAccessFile(String name, String mode)
public RandomAccessFile(File file, String mode)

第一个参数name/file:文件的路径
第二个参数mode:指定访问模式,有4种模式
r:以只读的模式打开,如果调用write方法将会抛出IO异常
rw:以读和写的模式打开
rws:以读和写的模式打开,要求对”文件的内容“和”元数据“的每个更新都同步到存储设备
rwd:以读和写的模式打开,要求对”文件的内容“的每个更新都同步到存储设备

新提供的方法:

long getFilePointer() //返回文件记录中指针的当前位置
void seek(long pos) //将文件记录移动到指定的pos文件    

例题:完成数据插入功能

    /**
     *  完成数据内容的插入
     * @param path  文件路径
     * @param index  指定数据插入位置
     * @param cont  插入的内容
     */
    public static void insertContent(String path  , int index, String cont) {

    }

1、校验参数的合法性
2、将指针移动到插入的位置
3、通过流读取出来写到磁盘文件上(开辟读和写的流)
4、将指针重新指定到插入位置
5、将写入的内容write写入
6、将后续内存重新写入该文件

    public static void insertContent(String path  , int index, String cont) {
        File file = new File(path);
        if (!file.exists()) {
            return;
        }
        if (index <0 ) {
            return;
        }

        FileInputStream tmpis = null;
        FileOutputStream tmpos = null;
        RandomAccessFile randomAccessFile =null;

        File tmpfile = new File(file.getParent() + File.separator + "tmp.txt");
        try {
            //写入零时文件
            tmpos = new FileOutputStream(tmpfile);
            //读取零时文件
            tmpis = new FileInputStream(tmpfile);

            //打开目标文件
            randomAccessFile = new RandomAccessFile(file, "rw");

            //指定要插入文件的位置
            randomAccessFile.seek(index);

            //将该位置的内容读取出来
            byte[] bytes = new byte[100];
            int len;
            while ((len = randomAccessFile.read(bytes)) != -1) {
                //写入零时文件
                tmpos.write(bytes,0,len);
            }
            tmpos.flush();

            //将指针移动到指定位置
            randomAccessFile.seek(index);
            //写入追加内容
            randomAccessFile.write(cont.getBytes());

            //将零时文件内容重新写入原文件
            while ((len = tmpis.read(bytes)) != -1) {
                randomAccessFile.write(bytes,0,len);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (tmpis != null) {
                    tmpis.close();

                }
                if (tmpos != null) {
                    tmpos.close();
                }
                if (randomAccessFile != null) {
                    randomAccessFile.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值