gpt4 book ai didi

java - File.delete() 返回 false

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:16:52 24 4
gpt4 key购买 nike

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

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

在调试期间(在调用 File.delete() 之前)从 Windows 资源管理器中删除文件,我收到通知“无法删除:正在被另一个程序使用”。

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

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

最佳答案

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

您有什么理由必须立即删除该文件吗?您可能想尝试 File.deleteOnExit(),这可能有更好的机会删除文件 - 虽然这取决于具体的时间安排。 (此外,如果您重复调用 deleteOnExit,请注意 possible memory leak。)

您能否在应用程序完成后或可能在下次启动时删除该文件?

或者,您能否使用日志实现来滚动文件 - 尝试强制滚动,然后删除旧文件?

关于java - File.delete() 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5401773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com