当前位置: 首页 > 知识库问答 >
问题:

在循环文件的内容时,流已经被操作或关闭

杨彦君
2023-03-14
    String fileName = "C:\\Users\\xxxxx\\Downloads\\InformeModificacionesUnificado28102021-09.txt";
//  File file = new File(fileName);
//  output = new BufferedWriter(new FileWriter(file));
   
    try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
        map.forEach((caracterMal, caracterBien) -> {
            stream.forEach(x -> {
                String cadenaWena = "";
                cadenaWena = x.replaceAll(caracterMal, caracterBien);
                System.out.println(cadenaWena); 
                //output.write(cadenaWena);
            });
        });

    } catch (IOException e) {
        e.printStackTrace();
    }

}

共有1个答案

董品
2023-03-14

该流只能迭代一次。您正在为映射中的每个元素迭代它。

停止使用lambdas(通常,在流上直接使用.foreach是糟糕的java代码;您将失去检查的异常、控制流和局部变量透明度,但没有任何收获),问题就消失了:

static void main(String[] args) throws IOException {
  var path = Paths.get(fileName);
  var lines = Files.readAllLines(path);
  for (var e : map.entrySet()) {
    for (String line : lines) {
      String cadenaWena = line.replace(caracterMal, caracterBien);
      System.out.println(cadenaWena);
    }
  }
}

这可以修复许多问题:

    null
 类似资料: