此处的代码给出了警告Resource leak: 'f' is never closed
。
如果我在try块中关闭f,它会起作用,但是如果我将f.close()
放在finally块中,它将不起作用。它显示错误f cannot be resolved
。那怎么了?
因此,该程序应该从用户那里获取输入并将其保存在.doc文件中,然后从同一文件中读取数据并打印出来。如果不是很明显,我正在学习Java。
因此代码可以正常工作,但是我注意到f
未被关闭的警告。我将f.close()
语句放在finally
块中。它在那里显示错误。
close语句在try
块中但不能识别f
块中的finally
时运行。
try {
RandomAccessFile f = new RandomAccessFile("E:\\emp.doc","r");
for (i = 0; i < size; i++) {
id1[i] = f.read();
name[i] = f.readUTF();
add[i] = f.readUTF();
sal[i]=f.readDouble();
if (sal[i] > 25000) {
System.out.println("ID:" + id1[i] + "\nName: " + name[i] +
"\nAddress:" + add[i] + "\nSalary" + sal[i]);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}//finally {
// f.close();
//}
因此在代码中,如果我不放置finally
块,程序将运行但会显示警告,提示f
未关闭。
如果我尝试将close
放在try
块中,则不会发出警告。
但是,如果我将close
放在finally
块中,则会出现错误f cannot be resolved
。
那我该怎么办才能解决警告?
答案 0 :(得分:1)
将其更改为
try ( RandomAccessFile f = new RandomAccessFile("E:\\emp.doc","r")){
....
}
不需要关闭,因为一旦try-scope结束,它将自动被调用。