Java 写入多个文件时,文件为空

Java 写入多个文件时,文件为空,java,Java,我试图在修改一个小点后读取一个文件并写入几个文件 我的代码在编写第一个文件时工作,但其他文件是空文件:( 我认为当我使用bufferedwriter和filewriter时会出现问题,但是我没有找到问题所在,尽管我按照stackoverflow的建议使用flush 我的代码中有什么问题 FileReader fr = new FileReader(FileDir); BufferedReader br = new BufferedReader(fr);

我试图在修改一个小点后读取一个文件并写入几个文件

我的代码在编写第一个文件时工作,但其他文件是空文件:(

我认为当我使用
bufferedwriter
filewriter
时会出现问题,但是我没有找到问题所在,尽管我按照stackoverflow的建议使用
flush

我的代码中有什么问题

        FileReader fr = new FileReader(FileDir);
        BufferedReader br = new BufferedReader(fr);
        for (String mc: matchedContents){
            FileWriter fw = new FileWriter(saveFileDir+String.valueOf(matchedContents.indexOf(mc)+1)+".xml", false);
            BufferedWriter bw = new BufferedWriter(fw);
            while ((s = br.readLine())!=null){
                // check if s has matched contents
                if (s.contains(mc)){
                    String replacedString="";
                    if (mc.contains("NV"))
                        replacedString = s.replace(mc, "NV("+anyItem(edgeNames)+")");
                    else if (mc.contains("AW"))
                        replacedString = s.replace(mc, "AW("+anyItem(edgeNames)+")");
                    bw.write(replacedString);
                    bw.newLine();
                }
                else {
                    bw.write(s);
                    bw.newLine();
                }
            }
            System.out.println(mc+" end");
            bw.flush();
            bw.close();
            fw.close();
        }
        br.close();
        fr.close();

这是因为在第一个文件之后,
bufferedReader
就结束了。要再次写入,需要将文件重新加载到
bufferedReader
。因此,需要做的是将
bufferedReader
FileReader
放入for循环中

    for (String mc: matchedContents){
        FileReader fr = new FileReader(FileDir);
        BufferedReader br = new BufferedReader(fr);
        FileWriter fw = new FileWriter(saveFileDir+String.valueOf(matchedContents.indexOf(mc)+1)+".xml", false);
        BufferedWriter bw = new BufferedWriter(fw);
        while ((s = br.readLine())!=null){
            // check if s has matched contents
            if (s.contains(mc)){
                String replacedString="";
                if (mc.contains("NV"))
                    replacedString = s.replace(mc, "NV("+anyItem(edgeNames)+")");
                else if (mc.contains("AW"))
                    replacedString = s.replace(mc, "AW("+anyItem(edgeNames)+")");
                bw.write(replacedString);
                bw.newLine();
            }
            else {
                bw.write(s);
                bw.newLine();
            }
        }
        System.out.println(mc+" end");
        bw.flush();
        bw.close();
        fw.close();
        br.close();
    }

    fr.close();

我会尝试逐行调试代码,并检查第二个、第三个等文件中到底写入了什么(可能文件写入还可以,但正在写入空字符串?)

同时检查:


尝试使用一种神奇的调试器。谢谢!!但是
FileReader fr=newfilereader(FileDir);
也应该在for循环中..或者,它不起作用。