我有这段代码:
Scanner fileReader = new Scanner(myFile);
// some code
fileReader = new Scanner(myFile);
// some more code
fileReader.close();
它做了我想要的(从文件顶部再次启动阅读器)但是我通过实例化两次并且只关闭一次而打开扫描仪?在我重新修复之前我应该关闭吗?我有什么作品,但我想知道它是否是一种好的做法。
答案 0 :(得分:6)
如果我重新验证扫描仪,旧的扫描仪会关闭吗?
不。
我应该在重新安排之前关闭吗?
烨。
我有什么作品,但我想知道这是否是好习惯。
这是不好的做法。这是资源泄漏。如果你做得太多,你可能会发现new Scanner(myFile)
会抛出异常,抱怨它已经用完了文件描述符(或类似的东西)。
建议的做法是使用 try
with resources 语法,以确保扫描程序无论如何都会关闭。 (或者,如果您是“老学校”和/或卡在Java 6或更早版本上......请在finally
块中关闭扫描仪......仔细。)
示例:
try (Scanner fileReader = new Scanner(myFile)) {
// some code
}
try (Scanner fileReader = new Scanner(anotherFile)) {
// some more code
}
没有必要明确关闭fileReader
。每个try
都有一个隐式finally
块,可以在close
资源上调用Closeable
,例如我们在那里创建的Scanner
个对象。)