gpt4 book ai didi

java - Findbugs 错误 - Bug : br is null guaranteed to be dereferenced on exception path

转载 作者:行者123 更新时间:2023-12-01 07:07:39 24 4
gpt4 key购买 nike

我需要读取属性文件。我为此目的使用 BufferedReader 和 FileReader。我在 try 部分之前将 BufferedReader 初始化为 null,并在 try 部分中进行初始化。最后,我要关闭读者。此时,我收到标题中提到的错误。

完整代码如下

public void getPageTitleProperties() throws IOException
{

BufferedReader br = null;
String lhs, rhs;
try
{
br = new BufferedReader(new FileReader("res" + File.separator + "pagetitle.properties"));
String line;
while ((line = br.readLine()) != null)
{
String [] keyvalue = line.split("=");
lhs = keyvalue[0];
rhs = keyvalue[1];
expectedTitles.put(lhs, rhs);
}
}
catch (RuntimeException ex)
{
ex.printStackTrace();
}
catch (IOException ex)
{
ex.printStackTrace();
}
finally
{
br.close();
}

System.out.println("Expected URLs and Titles");
for (String url : expectedTitles.keySet())
{
System.out.println(url + ":" + expectedTitles.get(url));
}

}

错误详细信息是 -

如何消除这个错误?我尝试将 BR 初始化为非空,在 try block 中初始化它(这不起作用,因为变量无法在 finally block 中解析:))。在一些类似的帖子中,人们提到这可能是误报。我还提到了 - http://findbugs.sourceforge.net/bugDescriptions.html#NP_GUARANTEED_DEREF ,但不知道如何消除该错误。

最佳答案

How can I get rid of this error?

问题是,如果 BufferedReaderFileReader 构造函数抛出异常,br 将为 null,但您仍然无条件调用 br.close()。在finally block 中关闭br 之前检查它是否为null:

finally {
if (br != null) {
br.close();
}
}

或者,在 try block 之前分配它:

BufferedReader br = new BufferedReader(...);
try {
...
} catch (...) {
...
} finally {
br.close(); // br will definitely not be null
}

或者在 Java 7 中更好,使用 try-with-resources 语句:

try (BufferedReader br = new BufferedReader(...)) {
...
} catch (...) {
...
}

请注意,当前您的 catch block 正在转储错误,但随后会继续执行,就好像什么也没发生一样 - 而我期望将异常传播到调用者。如果无法读取文件,您希望发生什么情况? (通过我建议的第二个和第三个更改,您仍然会在实际阅读时吞下异常,但在打开文件时不会。)

关于java - Findbugs 错误 - Bug : br is null guaranteed to be dereferenced on exception path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20488226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com