0

好吧,我正在尝试编写一行信息以登录文本文件(.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.");
        }
    }
}
4

1 回答 1

4

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

你应该在一个finally块中关闭它。

此外:

  • 您对append参数的使用显然很狡猾-您几乎可以肯定将其传递给FileWriter(or FileOutputStream) 的构造函数。我不认为appendinWriter做你认为它做的事情。
  • 尽量避免比较true- 只是if (append)会更清楚
  • 使用条件运算符可以使您的FileWriter代码更清晰,特别是如果您将它用于文件:

    File file = config == null ? er : config;
    Writer writer = new BufferedWriter(new FileWriter(file));
    
  • 我会避免FileWriter首先使用,因为它总是使用平台默认编码。使用FileOutputStream包装在 an 中OutputStreamWriter,明确指定编码(例如 UTF-8)
  • 避免Exception在大多数地方捕获;在这里,抓住它会更干净IOException
  • 看起来您的loadErrorLog方法可能应该在失败时进行日志记录,否则我怀疑您每次调用它时都会编写该代码块。
  • 如果您无法编写配置,您真的要继续吗?肯定是这种方法应该处理异常吗?我可能会catch完全删除块(只留下一个try/ finally)并让IOException气泡向上堆叠
于 2012-06-26T06:14:54.980 回答