java使用字符缓冲流读写文件莫名消失

张三
李四
王二
麻子
狗蛋
小明
这是文件里的内容
package com.lu.day11;import java.io.*;
import java.util.Map;
import java.util.Random;
import java.util.stream.Collectors;public class Test3 {public static void main(String[] args) {try (BufferedReader bufferedReader = new BufferedReader(new FileReader("resource/employee_names.txt"));BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("resource/employee_names.txt"))){int[] arr = new int[1];Random random = new Random();arr[0] =1;Map<Integer, String> collect = bufferedReader.lines().collect(Collectors.toMap((k) -> arr[0]++, (v) -> v));collect.forEach((k,v)-> System.out.println(k+" "+v));
//            int i = random.nextInt(1, 5);
//            if (Objects.nonNull(collect.get(i))){
//                System.out.println("恭喜"+collect.get(i)+"获得一等奖!");
//                collect.remove(i);
//            }
//            collect.forEach((k,v)->{
//                try {
//                    bufferedWriter.write(v+"\n");
//                } catch (IOException e) {
//                    throw new RuntimeException(e);
//                }
//            });} catch (IOException e) {throw new RuntimeException(e);}}
}
操作之后为什么文件里的内容没了

你遇到的问题是因为你在用 BufferedWriter 打开文件的时候,默认情况下是以覆盖模式打开的。这意味着文件的现有内容将被清空并被新的内容覆盖。但在你的代码中,你并没有写任何新的内容到文件中,因此文件变为空白。

1.使用追加模式:如果你希望在文件的现有内容后追加新的内容,而不是覆盖整个文件,你可以使用追加模式打开 BufferedWriter

BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("resource/employee_names.txt", true));

2.先读后写:如果你需要先读取文件的内容进行处理,然后再写回文件,你可以在读取完成后关闭 BufferedReader,然后重新打开 BufferedWriter 进行写操作。

3.先收集然后写回文件:修改你的代码逻辑,确保在所有需要的操作(如随机抽奖)完成后,再将结果写回文件。

修改后代码

package com.lu.day11;import java.io.*;
import java.util.Map;
import java.util.Random;
import java.util.stream.Collectors;public class Test3 {public static void main(String[] args) {try (BufferedReader bufferedReader = new BufferedReader(new FileReader("resource/employee_names.txt"))) {int[] arr = new int[1];Random random = new Random();arr[0] =1;Map<Integer, String> collect = bufferedReader.lines().collect(Collectors.toMap((k) -> arr[0]++, (v) -> v));collect.forEach((k,v)-> System.out.println(k+" "+v));// 随机抽奖int i = random.nextInt(1, collect.size() + 1);if (collect.containsKey(i)){System.out.println("恭喜" + collect.get(i) + "获得一等奖!");collect.remove(i);}// 写回文件try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("resource/employee_names.txt"))) {for (String value : collect.values()) {bufferedWriter.write(value + "\n");}}} catch (IOException e) {throw new RuntimeException(e);}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 之BigDecimal 常用方法使用

BigDecimal.ZERO&#xff1a;表示值为零的 BigDecimal。 BigDecimal.ONE&#xff1a;表示值为一的 BigDecimal。 BigDecimal.TEN&#xff1a;表示值为十的 BigDecimal。 常用方法 1,add(BigDecimal augend)&#xff1a;加法运算 BigDecimal c BigDecimal.ZERO;//表示值为零的…

Android12 OTA全包升级清除用户数据

一般情况下进行OTA升级&#xff0c;是不会清除用户数据&#xff0c;如果想清除用户数据&#xff0c;制作升级包时添加–wipe_user_data参数。 制作清除用户数据的差分包 ./out/soong/host/linux-x86/bin/ota_from_target_files --wipe_user_data -v --block -p out/host/linu…

【教学类-67-02】20240716毛毛虫ABB排序

背景需求&#xff1a; 【教学类-67-01】20240715毛毛虫AB排序-CSDN博客文章浏览阅读584次&#xff0c;点赞16次&#xff0c;收藏6次。【教学类-67-01】20240715毛毛虫AB排序https://blog.csdn.net/reasonsummer/article/details/140443310 在AB排序基础上&#xff0c;继续制作…

微信小程序:模板语法

模板语法 微信小程序有自己单独的一套模板语法。 WXML 结构 WXML 数据写法和Vue相似&#xff0c;数据通过 {{}} 包裹。 <text>{{ msg }}</text>WXSS 样式 WXSS 具有 CSS 大部分的特性&#xff0c;小程序在 WXSS 也做了一些扩充和修改。 rpx 单位 rpx 将屏幕等分为 …

【Django+Vue3 线上教育平台项目实战】登录功能模块之短信登录与钉钉三方登录

文章目录 前言一、几个关键概念1.HTTP无状态性2.Session机制3.Token认证4.JWT 二、通过手机号验证码登录1.前端短信登录界面2.发送短信接口与短信登录接口3.Vue 设置interceptors拦截器4. 服务端验证采用自定义中间件方式实现5. 操作流程及效果图如下&#xff1a; 三、通过第三…

记录些MySQL题集(9)

MySQL之死锁问题分析、事务隔离与锁机制的底层原理剖析 一、MySQL中的死锁现象 所谓的并发事务&#xff0c;本质上就是MySQL内部多条工作线程并行执行的情况&#xff0c;也正由于MySQL是多线程应用&#xff0c;所以需要具备完善的锁机制来避免线程不安全问题的问题产生&#…

手机如何伪装ip网络地址

伪装IP地址是指通过技术手段修改网络设备的IP地址&#xff0c;使其看起来像是来自另一个网络位置。这种技术通常用于隐藏真实的网络活动&#xff0c;以保护隐私。那么&#xff0c;手机如何伪装IP网络地址&#xff1f; 要在手机上伪装IP地址&#xff0c;‌可以通过下载和安装手机…

Spring事件监听机制详解

Spring事件监听机制详解 在现代软件开发中&#xff0c;解耦和灵活性是两个非常重要的设计原则。Spring 框架通过事件驱动的编程模型&#xff0c;实现了组件之间的松耦合。本文将介绍Spring事件监听机制的原理&#xff0c;并通过示例展示如何实现这一机制。 什么是Spring事件监…

数据资产通证化,堪比20年前的房地产?

大数据产业创新服务媒体 ——聚焦数据 改变商业 想象一下&#xff0c;一个简单的点击&#xff0c;一次不经意的搜索&#xff0c;一段简短的对话&#xff0c;它们在数字世界里留下了什么&#xff1f;是的&#xff0c;是数据。这些看似微不足道的数字碎片&#xff0c;汇聚成海&a…

【python】PyQt5的窗口界面的各种交互逻辑实现,轻松掌控图形化界面程序

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

【中项】系统集成项目管理工程师-第一模块:IT技术和管理-1.1信息与信息化-1.1.2信息系统基础

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&#xff0c;目前涵盖了计算机软件、计算机网络、计算机应…

Dart语法问答到实践

语法问答 Dart语法输出调试信息的方法叫&#xff1f; print Dart语言里定义抽象类的关键字是&#xff1f; abstract Dart语言里String转Int的方法是&#xff1f; int.parse Dart语言的数据类型String是首字母大写&#xff0c;而int是首字母小写&#xff1f; 受c/c和java的影响&…

Office动态水印终于来了

在信息安全日益重要的今天&#xff0c;保护敏感信息变得尤为关键。目前&#xff0c;动态水印甚至是盲水印技术已经在各种企业软件中广泛应用&#xff0c;常见的钉钉和企业微信等都已经支持此类技术&#xff0c;用户查看消息时画面会显示对应用户的姓名和工号等&#xff0c;而作…

小程序-视图与逻辑

一、页面导航 声明式导航 编程式导航 导航传参 1.声明式导航传参 2.编程式导航传参 3.在onload中接收导航参数 二、页面事件 下拉刷新 上拉触底 三、生命周期 分类 生命周期函数分类 1.应用的生命周期函数 2.页面的生命周期函数 四、WXS脚本 基础语法 wxs的特点 五、案…

Matlab学习笔记01 - 基本数据类型

Matlab学习笔记01 - 基本数据类型 1、数据类型转换2、矩阵2.1 访问单个矩阵元素2.2 访问多个矩阵元素2.3 矩阵转置 3、字符与字符串4、数值与字符串5、元胞数组 1、数据类型转换 十进制转十六进制字符串‘FF’ >> hex2dec(3ff)ans 1023十进制转十六进制字符串 >>…

几何相关计算

目录 一、 判断两个矩形是否相交 二、判断两条线段是否相交 三、判断点是否在多边形内 四、垂足计算 五、贝塞尔曲线 六、坐标系 一、 判断两个矩形是否相交 当矩形1的最大值比矩形2的最小值都小&#xff0c;那矩形1和矩形2一定不相交&#xff0c;其他同理。 struct Po…

GaussDB数据库使用gs_loader导入数据

1、创建用户并授予使用权限 CREATE USER gsloader WTH PASSWORD Gsloader14; GRANT ALL ON FUNCTlON copy_error_log_create() TO gsloader; GRANT ALL ON SCHEMA public To gsloader; SELECT copy_error_log_create(); SELECT copy_summary_create(); GRANT ALL FRIVILEGES ON…

阐述软件23种设计模式背后的图论和代数结构基础

软件设计模式是一套被广泛认可的解决特定设计问题的解决方案,它们在软件开发中被重复使用。虽然设计模式本身并不直接依赖于图论或代数结构,但这些数学概念为理解和实现某些设计模式提供了理论基础。以下是一些设计模式以及它们可能与图论和代数结构相关的方面: 1. **策略模…

华为OD 机试真题 - 分割均衡字符串(Python)

题目描述 均衡串定义:字符串只包含两种字符&#xff0c;且两种字符的个数相同。 给定一个均衡字符串&#xff0c;请给出可分割成新的均衡子串的最大个数。 约定字符串中只包含大写的’X"和’Y’两种字符。 输入描述 均衡串:XXYYXY 字符串的长度[2,10000]。给定的字符…

keepalive简单配置

一、keepalive相关知识 1.1 keepalive介绍 keepalive即LVS集群当中的高可用架构&#xff0c;只是针对调度器的高可用。是高可用的HA架构。 keepalive就是基于VRRP协议来实现LVS高可用的方案。 组播地址 224.0.0.18&#xff0c;根据组播地址进行通信&#xff0c;主备之间发送…