张三
李四
王二
麻子
狗蛋
小明
这是文件里的内容
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);}}
}