java - 如何正确关闭BufferedReader

标签 java android buffer bufferedreader filereader

我有这段读取 JSON 文件的代码:

Gson gson = new Gson();
BufferedReader bufferedReader = null;
try {
    bufferedReader = new BufferedReader(new FileReader(path));
    JsonObject data = gson.fromJson(bufferedReader, JsonObject.class);
    Log.d(TAG, "DATA: " + data.toString());
} catch (FileNotFoundException e) {
    e.printStackTrace();
} finally {
    if (bufferedReader != null) {
        try {
            bufferedReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

代码似乎工作正常,但在 logcat 中我收到以下 3 行:

com.example.package W/System: A resource failed to call close. 
com.example.package W/System: A resource failed to call end. 
com.example.package W/System: A resource failed to call close. 

这是正常现象还是我做错了什么?非常感谢。

最佳答案

好的,@deHaar,是对的:

try (BufferedReader bufferedReader = new BufferedReader(new FileReader(path))) {
    JsonObject data = gson.fromJson(bufferedReader, JsonObject.class);
    Log.d(TAG, "DATA: " + data.toString());
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

这样我就不会收到警告。但我不明白为什么。如果有人可以在评论中写下它,我将不胜感激。谢谢。

关于java - 如何正确关闭BufferedReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54885804/

相关文章:

java - 从结果集中选择(单击而不是 SQL Select)特定结果

java - 使用 "=="语句

android - 防止 ProGuard 评估数学表达式并删除 Android 中未使用的指令

android - Android SDK 管理器中损坏的内置工具(缺少 aapt.exe)

Python:如何从内存中的zip文件读取图像?

Java:使用不同的构造函数

java - Equals() 和 indexOf() 不能像我预期的那样使用 NumberFormat

android - 确定构建类型并在build.gradle中排除资源

python - 如何正确地将 Pytube bufferIO 转换为表示正弦波的 numpy 数组?

C# 异步 TCP 套接字 : Handling buffer size and huge transfers