我还在学习Java,我需要一些帮助来理解为什么这段代码是错的:
BufferedReader infile = new BufferedReader(new FileReader(file));
String regel = infile.readLine();
while (regel != null) {
// Do something with regel.
regel = infile.readLine();
}
infile.close();
我真的没有看到问题,但Eclipse一直在告诉资源泄漏并且infile没有关闭。
(还有一个细节,这段代码代表一个试块,但我把它留下来保持简单)
答案 0 :(得分:3)
Eclipse抱怨,因为引用可能没有关闭(例如,在Exception中);这是您使用finally
块的地方 - 也许就是这样
BufferedReader infile = null;
try {
infile = new BufferedReader(new FileReader(file));
String regel = infile.readLine();
while (regel != null) {
// Do something with regel.
regel = infile.readLine();
}
} catch (Exception e) {
e.printStackTrace(); // Log the exception.
} finally {
if (infile != null) {
infile.close(); // close the resource.
}
}
答案 1 :(得分:0)
你应该有一个try / catch块。
此外,您应该使用以下内容:
while ((line = reader.readLine()) != null) {
//do something with line;
}
答案 2 :(得分:0)
我认为Elliott Frisch是正确的,并指出我唯一要添加的主要原因是你应该关闭流(在finally块中)因为确保在输出成功的情况下刷新任何输出缓冲区。如果刷新失败,代码应该通过异常退出。这是另一个类似于您要解决的问题并确保您查看的示例(指南1-2:在所有情况下释放资源)http://www.oracle.com/technetwork/java/seccodeguide-139067.html
final OutputStream rawOut = new FileOutputStream(file);
try {
final BufferedOutputStream out =
new BufferedOutputStream(rawOut);
use(out);
out.flush();
} finally {
rawOut.close();
}