有资源泄漏警告,但我似乎无法关闭它

时间:2019-07-09 07:36:02

标签: java eclipse

此处的代码给出了警告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

那我该怎么办才能解决警告?

1 个答案:

答案 0 :(得分:1)

将其更改为

try ( RandomAccessFile f = new RandomAccessFile("E:\\emp.doc","r")){
....
}

不需要关闭,因为一旦try-scope结束,它将自动被调用。