写入文件代码不会写入

时间:2012-06-26 06:12:43

标签: java bufferedwriter

好吧,我正在尝试编写一行信息来登录文本文件(.txt),但这是代码无法编写的部分。其他所有工作,除此之外,但没有任何错误。

public void writeConfig(File config, Boolean append, String errored){
    try {
        Writer output;
        if (config != null){
            output = new BufferedWriter(new FileWriter(config));
        } else {
            output = new BufferedWriter(new FileWriter(er));
        }
        if (append == true){
            output.append(errored);
        } else {
            output.write(errored);
        }
    } catch (Exception e){
        try {
            loadErrorLog(error, true, "Failed to write to Boom's Log.\n");
        } catch (Exception e1){
            log.info("Major Malfunction #686 : Tell Maker immediatly.");
        }
    }
}

1 个答案:

答案 0 :(得分:4)

您没有关闭编写器,这意味着所有数据都只是停留在缓冲区中。

您应该在finally块中关闭它。

此外:

  • 您对append参数的使用显然是狡猾的 - 您几乎肯定会将其传递给FileWriter(或FileOutputStream)的构造函数。我认为append中的Writer不符合您的想法。
  • 尽量避免与true进行比较 - 只有if (append)会更清楚
  • 使用条件运算符可以使您的FileWriter代码更清晰,尤其是当您使用 作为文件时:

    File file = config == null ? er : config;
    Writer writer = new BufferedWriter(new FileWriter(file));
    
  • 我会首先避免使用FileWriter,因为它总是使用平台默认编码。使用FileOutputStream包裹的OutputStreamWriter,明确指定编码(例如UTF-8)
  • 避免在大多数地方捕获Exception;只要抓住IOException就可以了。
  • 看起来你的loadErrorLog方法可能会记录失败,否则我怀疑你会在每次的时候写出代码块。
  • 如果你没有写配置,你真的想继续吗?它肯定是这个方法应该处理异常吗?我可能会完全移除catch块(只留下try / finally)并让IOException冒泡到堆栈