2

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

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错误:在第 494 行调用获取的RESOURCE_LEAK 资源类型FileOutputStream(...)在第 499 行之后未释放。

但是我在 finally 块中释放它,这是一个错误的错误警报?或者我错过了什么?因为我已经有一段时间了,我不知道错误在哪里。

我非常感谢您的帮助和支持。

4

1 回答 1

4

使用 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();
}

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

于 2018-07-04T22:16:39.180 回答