BufferReader/BufferWriter使用时出现的问题

项目场景:

`
在一个文件中有一些数据,需要读取出来并替换成其他字符再写回文件中,需要用Buffer流。


问题描述

文件中的数据丢失,并且在读取前就为空,读取不到数据。
问题代码:

File f = new File("D:\\我的青春谁做主.txt");
        FileReader fr = new FileReader(f);
        BufferedReader br = new BufferedReader(fr);
        FileWriter fw = new FileWriter(f);
        BufferedWriter bw = new BufferedWriter(fw);
        StringBuffer str = new StringBuffer();

        String line = br.readLine();
        while (line != null){
            str.append(line);
            line = br.readLine();
        }
        System.out.println("替换前:" + str.toString());
        String newStr = str.toString().replace("{name}", "欧欧");
        String str1 = newStr.replace("{type}", "狗狗");
        String str2 = str1.replace("{master}", "风扇");
        System.out.println("替换后:" + str2);
        bw.write(str2);
        if (bw != null){
            bw.close();
        }
        if (br != null){
            br.close();
        }

过程DEBUG:

在这里插入图片描述
在这里我们看到在读取的过程就line的值为null


原因分析:

1.可能是因为读写的顺序反了?不合理,我的需求是将文件中数据读取出来并替换
2.可能是缓冲流的缓冲区的内存原因,在BufferWriter打开的时候将BufferReader的缓冲区替换掉了,所以读取不出来数据。


解决方案:

验证猜想:在用之前将流对象的值设为null,在需要使用的时候再进行实例化。
改后代码:

File f = new File("D:\\我的青春谁做主.txt");
        FileWriter fw = null;
        BufferedWriter bw = null;
        FileReader fr = null;
        BufferedReader br = null;
        StringBuffer str = new StringBuffer();
        try {
            fr = new FileReader(f);
            br = new BufferedReader(fr);
            String line = br.readLine();
            while (line != null) {
                str.append(line);
                line = br.readLine();
            }
            System.out.println(str.toString());
            System.out.println("替换前:" + str.toString());
            String newStr = str.toString().replace("{name}", "欧欧");
            String str1 = newStr.replace("{type}", "狗狗");
            String str2 = str1.replace("{master}", "风扇");
            System.out.println("替换之后:" + str2);
            fw = new FileWriter(f);
            bw = new BufferedWriter(fw);
            bw.write(str2);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (bw != null){
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (br != null){
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

运行结果:
在这里插入图片描述
证明假说成立,所以在用到缓冲流的时候要注意缓冲区,不能同时打开两个流,否则会被后打开的占用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/778003.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【算法专题】双指针算法

1. 移动零 题目分析 对于这类数组分块的问题,我们应该首先想到用双指针的思路来进行处理,因为数组可以通过下标进行访问,所以说我们不用真的定义指针,用下标即可。比如本题就要求将数组划分为零区域和非零区域,我们不…

51单片机基础10——串口实验

串口实验 51单片机串口实验1. 软硬件条件2. 串口实验2.1 单片机与PC 发送字符2.1.1 效果2.1.2 代码2.1.3 优化 2.3 串口接收数据(指令控制单片机)2.3.1 非中断方式实现2.3.2 中断方式实现 51单片机串口实验 1. 软硬件条件 单片机型号:STC89C52RC开发环境&#xff…

suricata7 rule加载(一)加载 action

suricata7.0.5 一、前提条件 1.1 关键字注册 main | --> SuricataMain|--> PostConfLoadedSetup|--> SigTableSetupsigmatch_table是一个全局数组,每个元素就是一个关键字节点,是对关键字如何处理等相关回调函数。非常重要的一个结构&#x…

DevOps实战:使用GitLab+Jenkins+Kubernetes(k8s)建立CI_CD解决方案

一.系统环境 本文主要基于Kubernetes1.21.9和Linux操作系统CentOS7.4。 服务器版本docker软件版本Kubernetes(k8s)集群版本CPU架构CentOS Linux release 7.4.1708 (Core)Docker version 20.10.12v1.21.9x86_64CI/CD解决方案架构图:CI/CD解决方案架构图描述:程序员写好代码之…

Python通过HiperMATRIX API写数据

PyCharm编程和调试 其中token 我偷懒了,只是调试,打开HiperMATRIX界面,登录,从浏览器console里面找到token value。 代码片段 import random, time, requests, jsonhipermatrix_api_url http://192.168.1.240:9030/api/edge-ma…

GlusterFS分布式存储系统

GlusterFS分布式存储系统 一,分布式文件系统理论基础 1.1 分布式文件系统出现 计算机通过文件系统管理,存储数据,而现在数据信息爆炸的时代中人们可以获取的数据成指数倍的增长,单纯通过增加硬盘个数来扩展计算机文件系统的存储…

Stable Diffusion:最全详细图解

Stable Diffusion,作为一种革命性的图像生成模型,自发布以来便因其卓越的生成质量和高效的计算性能而受到广泛关注。不同于以往的生成模型,Stable Diffusion在生成图像的过程中,采用了独特的扩散过程,结合深度学习技术…

SelectIO(参考ug471)

目录 SelectIO常用原语IBUF/IBUFGIBUFDS/IBUFGDSIOBUFIOBUFDSOBUFOBUFDSOBUFTOBUFTDS 常用 IO 约束PACKAGE_PINIOSTANDARDIBUF_LOW_PWRSLEWDRIVEPULLTYPEDIFF_TERMDIFF_TERM_ADVIOB SelectIO 逻辑资源HR和HP I/O Banks 区别ILOGIC结构图IDDR原语OPPOSITE_EDGE ModeSAME_EDGE Mo…

Elasticsearch 实现 Word、PDF,TXT 文件的全文内容提取与检索

文章目录 一、安装软件:1.通过docker安装好Es、kibana安装kibana:2.安装原文检索与分词插件:之后我们可以通过doc命令查看下载的镜像以及运行的状态:二、创建管道pipeline名称为attachment二、创建索引映射:用于存放上传文件的信息三、SpringBoot整合对于原文检索1、导入依赖…

Lua语言入门

目录 Lua语言1 搭建Lua开发环境1.1 安装Lua解释器WindowsLinux 1.2 IntelliJ安装Lua插件在线安装本地安装 2 Lua语法2.1 数据类型2.2 变量全局变量局部变量命名规范局部变量作用域 2.3 注释单行注释多行注释 2.4 赋值2.5 操作符数学操作符比较操作符逻辑操作符连接操作符取长度…

计算机网络(2

计算机网络续 一. 网络编程 网络编程, 指网络上的主机, 通过不同的进程, 以编程的方式实现网络通信(或网络数据传输). 即便是同一个主机, 只要不同进程, 基于网络来传输数据, 也属于网络编程. 二. 网络编程套接字(socket) socket: 操作系统提供的网络编程的 API 称作 “soc…

7 系列 FPGA 引脚及封装(参考ug475)

目录 I/O BankPins引脚定义I/O and Multi-Function PinsPower Supply PinsDedicated XADC PinsTransceiver PinsDedicated Configuration PinsTemperature Sensor Pins Device 视图整个 FPGAIOBILOGIC,OLOGIC,IDELAY,ODELAYBUFIO,BUFR,IDELAYCTRLBUFMRCEBRAM,DSPIBUFDS_GTE2CLB…

vue2响应式原理+模拟实现v-model

效果 简述原理 配置对象传入vue实例 模板解析,遍历出所有文本节点,利用正则替换插值表达式为真实数据 data数据代理给vue实例,以后通过this.xxx访问 给每个dom节点增加观察者实例,由观察者群组管理,内部每一个键值…

35.哀家要长脑子了!--二分

模板 int check() {...} // 检查这个数是否符合相应的要求// 把区间[l, r] 划分成[l, mid] 和 [mid1, r] 时使用 // 找到数组中第一个大于等于某一值得元素或满足特定条件的第一个位置 int bsearch_1(int l, int r){int mid l r >> 1;while(l < r) {if(check(mi…

如何第一次从零上传项目到GitLab

嗨&#xff0c;我是兰若&#xff0c;今天想给大家说下&#xff0c;如何上传一个完整的项目到与LDAP集成的GitLab&#xff0c;也就是说这个项目之前是不在git上面的&#xff0c;这是第一次上传&#xff0c;这样上传上去之后&#xff0c;其他小伙伴就可以根据你这个项目的git地址…

linux 服务器数据备份 和 mysql 数据迁移

查看域名ip 查看程序所处文件位置 list open files 1、 lsof -i :port 查看端口获取进程 pid 2、lsof -i pid 1、scp 下载服务器文件到本地 security copy protocol 2、导出服务器 mysql 数据库&#xff08;表&#xff09;到本地 mysqldump是MySQL自带的一个实用程序&…

2024亚太杯数学建模竞赛(B题)的全面解析

你是否在寻找数学建模比赛的突破点&#xff1f;数学建模进阶思路&#xff01; 作为经验丰富的数学建模团队&#xff0c;我们将为你带来2024亚太杯数学建模竞赛&#xff08;B题&#xff09;的全面解析。这个解决方案包不仅包括完整的代码实现&#xff0c;还有详尽的建模过程和解…

Linux wget报未找到命令

wget报未找到命令需要安装wget 1、下载wget安装文件&#xff0c;本次于华为云资源镜像下载 地址&#xff1a;https://mirrors.huaweicloud.com/centos-vault/7.8.2003/os/x86_64/Packages/ 2、下载后上传到安装服务器/install_package&#xff0c;执行命令安装 rpm -ivh /i…

PD虚拟机怎么联网?PD虚拟机安装Win11无法上网 pd虚拟机连不上网怎么解决 mac安装windows虚拟机教程

PD虚拟机既可以联网使用&#xff0c;也可以单机使用。如需将PD虚拟机联网&#xff0c;可以共享Mac原生系统的网络&#xff0c;其使用体验与真实系统无异。本文会详细讲解PD虚拟机如何联网&#xff0c;并会进一步解决PD虚拟机安装Win10无法上网的问题。 如果有网络相关问题的小伙…

女生学计算机好不好?感觉计算机分有点高……?

众所周知&#xff0c;在国内的高校里&#xff0c;计算机专业的女生是非常少的&#xff0c;很多小班30人左右&#xff0c;但是每个班女生人数只有个位数。这就给很多人一个感觉&#xff0c;是不是女生天生就不适合学这个东西呢&#xff1f;女生是不是也应该放弃呢&#xff1f;当…