资源泄漏未关闭

Resource leak not closed

提问人:Ezequiel Barreira 提问时间:3/2/2021 更新时间:3/2/2021 访问量:360

问:

我正在使用 Eclipse,并执行下面的功能,碰巧我正在打开一个 Scanner,然后,最后我关闭了它,但 Eclipse 一直说它没有关闭“资源泄漏:'scanner' 未关闭”。 我可以通过尝试使用资源来做到这一点,并且警告消失了,但我想了解为什么我在这里尝试的方式不起作用

   private void follow(String userID) {

        if(!(new File("../users/"+userID+"/")).exists()){
            System.out.println("User especificado nao existe");
            return;
        }

        File list = new File("../users/"+userID+"/followers.txt");
        try {
            list.createNewFile();

            Scanner scanner = new Scanner(list);
            while(scanner.hasNextLine()){
                String line = scanner.nextLine();
                if(line.equals(clientID)){
                    System.out.println("Cliente ja segue este user");
                    return;
                }
            }

            PrintWriter out = new PrintWriter(new FileWriter(list, true));
            out.append(clientID+"\n");

            out.close();
            scanner.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
eclipse java.util.scanner 资源泄漏

评论


答:

0赞 nitind 3/2/2021 #1

#createNewFile()可以在到达语句之前抛出 IOException,从而阻止它被执行。close()

0赞 Kevin Z 3/2/2021 #2

最后说一句:out.close()

finally {
    out.close();
}

它的作用是,即使抛出错误,其中的任何代码也会被执行。finally

0赞 devwebcl 3/2/2021 #3

扫描仪实现 AutoCloseable;您可以使用 try-with-resources

https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html