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);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值