【问题标题】:IOUtils.write creates new file but doesn't write dataIOUtils.write 创建新文件但不写入数据
【发布时间】:2015-01-14 07:52:25
【问题描述】:

使用 IOUtils.write 将字符串写入文件

    try {
        IOUtils.write("test", new FileWriter(configFile));
    } catch (Exception e) {
        e.printStackTrace();
    }

其中 configfile 是配置文件的位置(“./resources/config.json”) 这似乎删除了文件并用没有内容的文件替换它。

也不会抛出异常。

【问题讨论】:

    标签: java


    【解决方案1】:

    使用后请务必关闭流,否则数据可能不会写入文件。

     FileWriter fw=null;
     try {
        fw= new FileWriter(configFile);
        IOUtils.write("test",fw);
        }catch (Exception e) {
         e.printStackTrace();
       }finally
       {
        IOUtils.closeQuietly(fw);
       }
    

    【讨论】:

    • 我会提供使用 IOUtils.closeQuietly(fw) 方法。在 finally 块中添加 closeQuietly() 只是确保关闭,例如当刷新失败并且在 try-block 中没有调用 close 时。
    • 是的,流的关闭应始终写入finally,这确保始终执行close()。除了try 中的异常之外,它还将确保close() 针对来自trycatch 的意外返回或中断执行
    【解决方案2】:

    您需要关闭编写器,或者对资源使用 try。否则可能无法将所有内容刷新到磁盘:

    try (FileWriter fw = new FileWriter(configFile)) {
        IOUtils.write("test", fw);
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    【讨论】:

      【解决方案3】:

      试试这个代码:

      FileWriter fw = null;
      try {
          fw  = new FileWriter(configFile);
          IOUtils.write("test", fw);
      } catch (IOException e) {
          e.printStackTrace();
      } finally {
          if(fw != null)
              fw.close();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-03
        • 2014-06-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多