File.delete()返回false

Sha*_*ala 3 java file-io logging log4j apache-commons-logging

我已经从我的java编程创建了一个文件,并使用Apache Commons Logging API记录一些数据,特别是Log4j实现.

完成日志记录后,我将对Log类的引用设置为null.当我现在尝试删除我一直记录的文件时,File.delete()返回false.

在调试期间(在调用File.delete()之前的那一点上从Windows资源管理器中删除文件),我收到通知"无法删除:被其他程序使用".

我的代码中没有对文件的开放依赖关系(所有流都已关闭).唯一可以访问该文件的对象是Log对象,我在调用File.delete()之前将其设置为null

无论如何我可以看到哪个特定对象持有对文件资源的引用?有没有其他方法可以强制Log对象释放资源,而不是将其设置为null?我可以强制删除文件吗?

Jon*_*eet 5

仅将变量设置为null不会强制对象进行垃圾回收.此外,它有可能在某种静态地图中注册 - 您必须检查实施以确定.(我认为某些版本使用弱引用,但其他版本不使用.)

有没有什么任何理由必须要删除的文件的权利呢?你可能想尝试File.deleteOnExit(),这可能有更好的机会删除文件 - 虽然它取决于时间是什么样的.(另外,如果反复调用,请注意可能的内存泄漏deleteOnExit.)

您可以在应用程序完成后删除文件,还是在下次启动时删除?

或者,您可以使用日志实现来翻转文件 - 尝试强制翻转,然后删除旧文件?