java - 写入文件代码不写入

标签 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.");
        }
    }
}

最佳答案

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

您应该在 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/

相关文章:

java - 子类 toString 打印 null? (对不同的toStrings使用相同的参数)

-classpath 选项中的 Javac 与 Java

java - 获取系统日志的完整输出(终端)

java - 无法让 BufferedWriter 写出文件中的所有数据

java - 将 GPS 坐标循环写入 SQL 服务器

java - 为什么 System.out.println 的输出与 bufferedwriter 不同?

java - 在 FileWriter - Java 中设置编码的替代方法

java - OOP - 是否需要构造函数?

c# - 在 Windows 中对 'live' 文件使用 grep

java - 我不知道 OS X 上的路径格式是什么,所以我可以使用 Java 编写 .csv 文件