Eclipse给我以下的资源泄漏警告有什么原因吗:resource leak:'br'is never close“?我所说的代码在本文的底部。
我以为我的最后一个区块已经把它都覆盖了,我的推理是:
那我错过了什么?或者这可能是一个eclipse bug?
亲切的问候!
S.
public static String fileToString(String fileName, String encoding) throws IOException {
InputStream is;
InputStreamReader isr;
BufferedReader br;
Closeable res = null;
try {
is = new FileInputStream(fileName);
res = is;
isr = new InputStreamReader(is, encoding);
res = isr;
br = new BufferedReader(isr);
res = br;
StringBuilder builder = new StringBuilder();
String line = null;
while ((line = br.readLine()) != null) {
builder.append(line);
builder.append(LS);
}
return builder.toString();
} finally {
if (res != null) {
res.close();
}
}
}
Eclipse可能只是不理解您对res
变量所做的调整。
我推荐使用try-with-resources语句(在Java ;7及更高版本中可用,现在已经有三年半了),它极大地简化了这些类型的链:
public static String fileToString(String fileName, String encoding) throws IOException {
try (
InputStream is = new FileInputStream(fileName);
InputStreamReader isr = new InputStreamReader(is, encoding);
BufferedReader br = new BufferedReader(isr)
) {
StringBuilder builder = new StringBuilder();
String line = null;
while ((line = br.readLine()) != null) {
builder.append(line);
builder.append(LS);
}
return builder.toString();
}
}
如果您不能使用try-with-resources,那么您可能需要类似于Apache Commons的ioutils
类的closequiete
方法(可以是该方法,也可以是您自己的方法),而不是将res
到处乱放,这样读起来会很尴尬,而且我敢说很容易出现维护问题。
使用IOUTILS
可能如下所示:
public static String fileToString(String fileName, String encoding) throws IOException {
InputStream is = null;
InputStreamReader isr = null;
BufferedReader br = null;
try {
is = new FileInputStream(fileName);
isr = new InputStreamReader(is, encoding);
br = new BufferedReader(isr)
StringBuilder builder = new StringBuilder();
String line = null;
while ((line = br.readLine()) != null) {
builder.append(line);
builder.append(LS);
}
br.close();
return builder.toString();
}
finally {
IOUtils.closeQuietly(br, isr, is);
}
}
请注意我是如何在try
中使用普通的close
的,但然后确保在finally
中进行清理的。
但是尝试使用资源是更好的答案,因为它更简洁,并且与新的(ish)“被抑制的异常”相关联。
附带说明:行
的=null
初始化没有任何原因,您可以在下一行指定它。
边注2:如果文件很可能是任意大小的,请考虑提前找出它有多大,并在构造函数中设置StringBuilder
的容量。StringBuilder
的默认容量是16,因此即使是几百html" target="_blank">字节的文件也需要重新分配StringBuilder
的内部缓冲区。
eclipse“潜在资源泄漏”警告不正确。 没有警告: 警告:潜在资源泄漏:“此位置可能未关闭响应” 为什么第二种方法会引起警告? 谢谢!
这里的代码给出了。如果我在try块中关闭f,它可以工作,但是如果我将放在finally块中,它就不工作了。它显示错误。那有什么问题? 因此,程序应该从用户那里获取输入并将其保存在.doc文件中,然后从同一文件中读取数据并打印出来。如果还不是很明显的话,我正在学习Java。 因此,代码可以工作,但我注意到有一个警告,没有关闭。我将语句放在块中。它在那里显示了一个错误。 close语句在块中但无法识别
在中,我收到了一个警告,我不明白这一点。 这是理解问题还是java/eclipse问题?
我有一个连接到MySQL的服务方法,可以在中获取数据,最后在
Eclipse(Juno)发出以下警告:
我使用一个用不同长度的不同值填充字节数组。我使用方法。由于此方法继承自,因此可能会引发IOException。在中有一个方法不会引发IOException,因此我扩展了并覆盖方法,该方法现在也不会引发IOException: 对于扩展类,我在eclipse 4.5.1中得到了资源泄漏的警告,因为我没有关闭代码中的流。的情况并非如此。我的扩展类有什么问题,或者我需要添加什么来删除警告?我知道我可以将