2012-06-26 44 views
0

那么,我正在尝试编写一行信息来登录文本文件(.txt),但这是代码无法写入的部分。除此之外,其他一切都有效,但不会给出任何错误。Write-to-file代码不写

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

为什么'append'一个'Boolean'而不是一个'boolean'? –

回答

4

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

您应该在finally块中关闭它。

此外:

  • 您的append参数的使用也明显狡猾的 - 你应该几乎可以肯定它传递给FileWriter(或FileOutputStream)的构造函数。我不认为appendWriter做你认为它做。
  • 尽量避免与true比较 - 只是if (append)本来清晰的
  • 使用条件运算符可以使你的FileWriter代码更加清晰,特别是如果你使用它只是的文件:

    File file = config == null ? er : config; 
    Writer writer = new BufferedWriter(new FileWriter(file)); 
    
  • 我会首先避免使用FileWriter,因为它总是使用平台默认编码。使用包含在OutputStreamWriter中的FileOutputStream来替代,明确指定编码(例如UTF-8)
  • 避免在大多数地方捕获Exception;这里只需要抓住IOException就够了。
  • 它看起来像你的loadErrorLog方法可能应该是这样做的日志记录失败,否则我怀疑你会每编写代码时,你叫它。
  • 如果您未能编写配置,您是否真的想继续?是否这个应该处理异常的方法?我可能完全除去catch块(只留下一个try/finally),并让IOException气泡在栈中向上
+0

我需要先输出.flush()吗? – KeirDavis

+1

@KeirDavis:我不会 - 关闭意味着无论如何都要冲洗。我相信有一些奇怪的错误情况,在发生异常后可能不会刷新,但我个人不会担心这种情况。 –

+1

+1关于'if(append)'的唯一注意事项是由于某种原因append是'Boolean'而且可能是'null'我会建议追加一个'boolean' –