如果我实例化扫描仪,旧的扫描仪会关闭吗?

时间:2015-02-09 12:11:05

标签: java java.util.scanner

我有这段代码:

Scanner fileReader = new Scanner(myFile);
// some code
fileReader = new Scanner(myFile);
// some more code
fileReader.close();

它做了我想要的(从文件顶部再次启动阅读器)但是我通过实例化两次并且只关闭一次而打开扫描仪?在我重新修复之前我应该​​关闭吗?我有什么作品,但我想知道它是否是一种好的做法。

1 个答案:

答案 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个对象。)