我已经从我的java编程创建了一个文件,并且正在记录某些数据使用Apache Commons Logging API,特别是Log4j实现。File.delete()返回false
日志记录完成后,我将Log类的引用设置为null。当我现在尝试删除我已经记录的文件时,File.delete()返回false。
在调试期间(在调用File.delete()之前的位置)从Windows资源管理器中删除文件,我得到通知“无法删除:被另一个程序使用”。
从我的代码中没有对文件的开放依赖关系(所有流都关闭)。唯一可以访问该文件的对象是Log对象,我在调用File.delete()之前将它设置为null。()
有什么方法可以看到什么特定对象持有对文件资源的引用? 是否有任何其他方式强制Log对象释放资源,除了将其设置为null? 我可以强制删除文件吗?
我正在编写一个将在代码库中自动执行的测试。我无法更改我正在测试的代码的实现,所以无法从Log4j移动。我如何强制我设置为null的对象上的垃圾回收? – 2011-03-23 07:07:12
@Shailesh:重要的是你明白你不能将* object *设置为null,只能设置一个* variable *。如果该变量是引用该对象的唯一东西,那么它将有资格进行垃圾回收 - 但我怀疑你会发现其他引用埋在log4j中。如果这是一个测试,你可能想尝试配置log4j不使用文件进行日志记录 - 登录到StringBuilder或类似的会更好。 – 2011-03-23 07:12:08
谢谢,没有想到Log4j会设置多个对象的引用。记录到StringBuilder将是我最好的解决方法。 – 2011-03-23 07:16:10