嗯,我正在尝试编写一行信息来登录文本文件(.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.");
}
}
}
最佳答案
您没有关闭写入器,这意味着所有数据都保留在缓冲区中。
您应该在 finally
block 中关闭它。
另外:
- 您对
append
参数的使用显然是不可靠的 - 您几乎肯定应该将其传递给FileWriter
(或FileOutputStream
)。我认为Writer
中的append
并没有达到您的预期。 - 尽量避免与
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
方法可能应该在失败时进行日志记录,否则我怀疑您每次调用它时都会编写该代码块。 - 如果您无法写入配置,您真的要继续吗? this 方法肯定应该处理异常吗?我可能会完全删除
catch
block (只留下try
/finally
)并让IOException
冒泡向上堆栈
关于java - 写入文件代码不写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11201640/