代码之家  ›  专栏  ›  技术社区  ›  dicarlomagnus

如何正确管理outputstream以避免资源泄漏错误

  •  1
  • dicarlomagnus  · 技术社区  · 7 年前

    我已经被这个问题困扰了一段时间,我读了一些关于如何实现inputstream变量及其生命周期的教程和文档,但是我又一次克服了一个同样的错误,这个错误标记为“推断”来自facebook的静态分析器,这表明我有一个问题: 资源泄漏 在此代码中:

    File file = new File(PATH_PROFILE + UserHelper.getInstance().getUser().getId() + ".jpg");
        OutputStream os = null;
        try {
            os = new FileOutputStream(file);
            os.write(dataBytes);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (os != null) {
                try {
                    os.flush();
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    

    描述错误为:

    错误:资源泄漏 类型资源 java.io.FileOutputStream 通过调用获取 FileOutputStream(...) 在第494行,在第499行之后不释放。

    但我把它放在最后一块,这是一个错误警报?或者我遗漏了什么?因为我在这方面已经有一段时间了,我不知道错误在哪里。

    我真的很感谢你的帮助和支持。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Andreas dfa    7 年前

    使用try with resources(从java 7开始提供)。

    File file = new File(PATH_PROFILE + UserHelper.getInstance().getUser().getId() + ".jpg");
    try (OutputStream os = new FileOutputStream(file)) {
        os.write(dataBytes);
    } catch (Exception e) {
        e.printStackTrace();
    }
    

    要了解更多信息,请阅读: