使用Java删除文件的问题(apache commons io)

2022-09-04 21:44:52

我通过JNI调用C++方法,该方法创建两个文件。给定目录中的文本日志文件和 pdf 文件。我想在执行JNI方法之前删除这些文件(如果它们存在)。

我正在使用Apache commons.io(FileUtils.forceDelete(File file))当我执行时,我得到一个IOException:

java.io.IOException: Unable to delete file: D:\Folder\file.log

在使用File.canWrite()方法触发删除方法之前,我检查了文件的可写状态。对于文件和父目录,它都返回 true。

您知道为什么我在删除文件时遇到问题吗?据我所知,创建文件C++方法在方法完成后关闭或解锁它们。无论如何,我无法访问C++代码的源代码,因此我无法检查是否确实如此或修改代码。

谢谢 马可


答案 1

几乎可以肯定它被另一个进程锁定。如果这是操作系统级别的另一个进程锁定(假设您让文件在文本编辑器中打开它),那么您就不会有太多的运气。即使Windows资源管理器也无法删除文件,如果其他东西锁定了它。但是,请查看java.nio.channels.FileLock以获取相关的API调用。


答案 2

最有可能的是,另一个进程保持打开状态,这将阻止它被删除。file.log


推荐