首页 > 编程语言 >javaIO之随机读写

javaIO之随机读写

时间:2023-04-24 14:11:18浏览次数:29  
标签:tmp rw String 读写 fileName javaIO hasRead 随机 new

javaIO包提供了很多可以读写文件的类,但是如果想在文件的指定位置读写,就需要使用RandomAccessFile

public class App {
    public static void main(String[] args) throws IOException {
        {
            String s1 = "ggg\n";
            String s2 = "ggg,hhh\n";
            String fileName = "C:\\Users\\G007112\\Desktop\\test123.txt";
//            update(fileName, 6, s1, s2);
            append(fileName, "zzzzz");

        }
    }

    /**
     * 在文件指定位置插入内容
     *
     * @param fileName
     * @param pos
     * @param s
     * @throws IOException
     */
    public static void insert(String fileName, int pos, String s) throws IOException {
        File tmp = File.createTempFile("tmp", null);
        try {
            File file = new File(fileName);
            tmp.deleteOnExit();
            try (RandomAccessFile rw = new RandomAccessFile(file, "rw")) {
                try (FileOutputStream tmpOut = new FileOutputStream(tmp);
                     FileInputStream tmpIn = new FileInputStream(tmp)) {
                    rw.seek(pos);
                    byte[] buffer = new byte[64];
                    //读取指针之后的所有内容
                    int hasRead = 0;
                    while ((hasRead = rw.read(buffer)) > 0) {
                        tmpOut.write(buffer, 0, hasRead);
                    }
                    //重新定位指针
                    rw.seek(pos);
                    rw.write(s.getBytes(StandardCharsets.UTF_8));
                    while ((hasRead = tmpIn.read(buffer)) > 0) {
                        rw.write(buffer, 0, hasRead);
                    }
                }
            }

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 在文件指定位置替换内容
     *
     * @param fileName
     * @param pos
     * @param s0       原字符串
     * @param s1       目标字符串
     * @throws IOException
     */
    public static void update(String fileName, int pos, String s0, String s1) throws IOException {
        File tmp = File.createTempFile("tmp", null);
        try {
            File file = new File(fileName);
            tmp.deleteOnExit();
            try (RandomAccessFile rw = new RandomAccessFile(file, "rw")) {
                try (FileOutputStream tmpOut = new FileOutputStream(tmp);
                     FileInputStream tmpIn = new FileInputStream(tmp)) {
                    rw.seek(pos + s0.length());
                    byte[] buffer = new byte[64];
                    //读取指针之后的所有内容
                    int hasRead = 0;
                    //先把s1和s0之后的内容缓存
                    tmpOut.write(s1.getBytes(StandardCharsets.UTF_8), 0, s1.length());
                    while ((hasRead = rw.read(buffer)) > 0) {
                        tmpOut.write(buffer, 0, hasRead);
                    }
                    //重新定位指针
                    rw.seek(pos);
                    while ((hasRead = tmpIn.read(buffer)) > 0) {
                        rw.write(buffer, 0, hasRead);
                    }
                }
            }

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 在文件末尾追加数据
     *
     * @param fileName
     * @param s
     */
    public static void append(String fileName, String s) {
        File file = new File(fileName);
        try (RandomAccessFile rf = new RandomAccessFile(file, "rw")) {
            long length = file.length();
            rf.seek(length);
            rf.write(s.getBytes(StandardCharsets.UTF_8));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

 

标签:tmp,rw,String,读写,fileName,javaIO,hasRead,随机,new
From: https://www.cnblogs.com/wangbin2188/p/17349331.html

相关文章

  • mysql主从:mysql 主从、django使用多数据库做读写分离
    目录一、mysql主从介绍搭建步骤二、django使用多数据库做读写分离一、mysql主从介绍MySQL主从复制是一种常见的数据库复制技术,可以将一个MySQL数据库的数据复制到多个从库中,从而提高读取性能和数据可用性。在主从复制中,主库是数据的源头,从库是数据的副本,主库将数据变更记录......
  • mysql 主从,django操作读写分离
    目录mysql主从搭建步骤1.准备两台机器2.创建文件夹,文件(目录映射)3编写mysql配置文件(主,从)重要启动mysql容器,并做端口和目录映射连接主库修改新建用户连接从库修改配置django操作多数据库方法1.配置文件2.手动读写分离3.自动读写分离4.配置文件添加新点mysql主从目的: 主要做读......
  • 1 python操作哨兵 、2 python操作集群、3 缓存优化、4 mysql 主从 、5 django使用多数
    目录1python操作哨兵2python操作集群3缓存优化3.1redis缓存更新策略3.2缓存击穿,雪崩,穿透4mysql主从5django使用多数据库做读写分离1python操作哨兵#高可用架构后---》不能直接连某一个主库了---》主库可能会挂掉,后来它就不是主库了#之前学的连接redis的操作,就用不......
  • mysql主从-day1——mysql主从搭建、django中使用多数据库做读写分离
    目录一、mysql主从5django使用多数据库做读写分离一、mysql主从#之前做过redis的主从,很简单#mysql稍微复杂一些,搭建mysql主从的目的是? -读写分离-单个实例并发量低,提高并发量-只在主库写,读数据都去从库#mysql主从原理步骤一:主库db的更新事件......
  • 【RPA】使用影刀读写Excel的若干问题及解决方案
    RPA是机器人流程自动化(Roboticprocessautomation)的简称,它可以通过低代码开发方式,模仿最终用户在电脑的手动操作,创建工作流,实现工作流程的自动化。该技术起源于上世纪90年代,2015年至今进入高速发展阶段,应用链条更长,功能不断增强。“影刀”便是一款值得推荐的RPA工具。在使用RPA......
  • mysql+proxysql+replication-manager的主从半同步复制+高可用+读写分离
    环境:AlmaLinuxrelease9.1MySQLCommunityServerVer8.0.33ReplicationManagerv2.2.40forMariaDB10.xandMySQL5.7SeriesProxySQLversion2.5.1-90-gbedaa6c主机分配情况:采用hyper-v创建虚拟机的方式进行的,创建1台模板之后另外3台导入虚拟机复制。1、安装mysq......
  • random随机数的学习
    Linux中的随机数知多少原创 入门小站 入门小站 2023-04-2122:26 发表于湖北收录于合集#Linux766个入门小站分享运维技巧及10k+Stars的开源项目237篇原创内容公众号【Linux250个常用命令速查手册】关注【入门小站】,后台回复「1001」自取。Li......
  • R语言随机森林RandomForest、逻辑回归Logisitc预测心脏病数据和可视化分析|附代码数据
    全文链接:http://tecdat.cn/?p=22596最近我们被客户要求撰写关于预测心脏病的研究报告,包括一些图形和统计输出。本报告是对心脏研究的机器学习/数据科学调查分析。更具体地说,我们的目标是在心脏研究的数据集上建立一些预测模型,并建立探索性和建模方法。但什么是心脏研究?研究大纲......
  • MySQL读写分离ProxySQL安装部署
    ProxySQL简介ProxySQL为MySQL的中间件,其有两个版本官方版和percona版,percona版是基于官方版基础上修改而来。ProxySQL是由C++语言开发,轻量级但性能优异(支持处理千亿级数据),其具有中间件所需要的绝大多数功能,如:多种方式的读写分离定制基于用户、基于schema、基于语言的规则对SQL语句......
  • Java开发 - 读写分离初体验
    前言上一篇中,我们介绍了主从复制,相信学过的小伙伴已经能够很好的掌握主从复制的技术,实际上也并没有那么难,虽然没有讲一主多从,多主多从的配置,但是从一主一从的配置中也很容易联想到该怎么配置,你没猜错,就是你想的那样。这篇博客,我们要讲解的东西是主从复制的应用——读写分离。一般来......