我的代码中有很多地方删除了临时文件,在某些情况下这些临时文件没有被删除。
有没有办法在 Java 中找到创建但未删除文件的位置(类似于在 中查找内存泄漏C++
)?
通过覆盖 File 类,您可以将打开的文件添加到集合中,并在删除时将其删除。这样,您应该能够探测在任何给定点打开了哪些文件。不确定那是您要寻找的东西。
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.