当前位置: 首页 > 知识库问答 >
问题:

Java扫描器资源泄漏,.close()不能关闭多个赋值

松霖
2023-03-14
public static String[][] lesFil(Scanner input) {

        Scanner in;
        String fileName = "d";

        try {

            in = new Scanner(textfile);

            while (in.hasNextLine()) {

                in.nextLine();
            }


            in = new Scanner(textfile);

            while (in.hasNextLine()) {

                in.nextLine();
            }
            in.close();

        } 
        catch (FileNotFoundException e) {


        }

        return null;
    }

共有1个答案

艾仲渊
2023-03-14

答案似乎很明显,您应该关闭扫描仪,然后再将您的“IN”重新分配给另一个扫描仪。

虽然您可能只需要在同一个迭代中完成2个任务,但IO是少数几个在资源方面非常昂贵的事情之一。

另外,如果您不需要扫描仪直接提供的东西,而只是想读取行,为什么不使用FileReader和BufferedReader呢?如果您可以使用Java7,您甚至可以使用files.readalllines(参见https://stackoverflow.com/a/12838276/144578)

 类似资料:
  • 资源泄漏:“扫描”永远不会关闭。 因此,我在代码末尾添加了来处理警告。 出现这个问题是因为我在同一个包中有其他类也使用scanner对象,而Eclipse告诉我分别关闭这些类中的scanner。然而,当我这样做时,它似乎关闭了所有的扫描器对象,并在运行时得到错误。 我遇到的一篇文章提到,当关闭时,我不能重新打开。如果是这种情况,我是否只需要确保一个带有System.in的扫描器对象在程序末尾关闭,

  • 大家好,我的程序员们。 我有一些代码,spring工具套件编辑器的反应也不一样,也许你们一些聪明人知道为什么。 有人能告诉我为什么这是不可能的吗: 但这是!? 第一行代码给了我一个警告“Resource leak:unassigned closeable value is never close”,正如您所看到的,我在try/catch中使用了一个finally,如果对象不为空,它应该总是关闭对象

  • 我正在使用Eclipse,并执行下面的函数,碰巧我打开了一个扫描器,然后,最后我关闭了它,但Eclipse一直说它没有关闭“资源泄漏:'Scanner'没有关闭”。我可以用try with resources来完成,警告消失了,但我想知道为什么我在这里尝试的方式不起作用

  • 我正在读取一个文件并将其内容存储在字符串中。代码给了我一个警告:Resource leak:。我如何解决它?

  • 我正在编写一个程序,希望控制台输出用户输入的数字的剩余部分。但是,每次我编译代码时,控制台都会打印出来,我得到以下控制台错误: 我不确定控制台所说的“资源泄漏”是什么意思。我在几个不同的地方查找过它(包括API和其他堆栈溢出问题),我不确定为什么没有打印到控制台。我正在使用DrJava程序,以防有人想知道。 这里是我的代码供参考:

  • 为什么Eclipse在下面的代码中给了我变暖的“资源泄漏:'in'从不关闭”?