【问题标题】:files are empty when writing multiple files写入多个文件时文件为空
【发布时间】:2016-09-01 05:51:46
【问题描述】:

我正在尝试读取一个文件,修改一个小点后写入几个文件。

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

我认为当我使用 bufferedwriterfilewriter 时存在问题,但我遵循了使用 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();

【问题讨论】:

  • 尝试使用那个神奇的东西,叫做调试器。

标签: java


【解决方案1】:

这是因为在第一个文件之后,您的 bufferedReader 就结束了。要再次写入,您需要将文件重新加载到bufferedReader。所以你需要做的是在 for 循环中创建 bufferedReaderFileReader

    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 = new FileReader(FileDir); 也应该在 for 循环中。或者,它不起作用。
【解决方案2】:

我会尝试逐行调试代码并检查正在写入第二个、第三个等文件的确切内容(也许文件写入正常,但正在写入空字符串?)。

还要检查:
Debugging Java code line by line
Java read in single file and write out multiple files

【讨论】:

    猜你喜欢
    • 2014-04-12
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多