0

我的代码中有很多地方删除了临时文件,在某些情况下这些临时文件没有被删除。

有没有办法在 Java 中找到创建但未删除文件的位置(类似于在 中查找内存泄漏C++)?

4

2 回答 2

1

通过覆盖 File 类,您可以将打开的文件添加到集合中,并在删除时将其删除。这样,您应该能够探测在任何给定点打开了哪些文件。不确定那是您要寻找的东西。

于 2013-10-15T09:12:21.563 回答
0

It's not a "pretty" solution, but you could use a custom SecurityManager and look for FilePermission.

private static class FileSecurityManager extends SecurityManager {

    @Override
    public void checkPermission(Permission perm) {
        if (perm instanceof FilePermission) {
            System.out.println(perm);
        }

        // super.checkPermission(perm);
    }

}


public static void main(String[] args) throws Exception {
    System.setSecurityManager(new FileSecurityManager());

    Files.delete(Files.createTempFile(null, null));
    File.createTempFile("tempfile", null).delete();
}

This example works with standard IO and NIO access to the filesystem.

于 2013-10-15T15:22:13.180 回答