使用Java删除文件时出现问题(apache commons io)

时间:2011-05-12 12:16:10

标签: java io apache-commons apache-commons-io

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

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

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

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

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

谢谢,Marco

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

我正在运行Eclipse 4.x和jre 1.7,将webapp部署到tomcat7。

我在尝试从弹簧控制器中删除文件时遇到同样的问题。

File f = new File("/home/me/my/file/liveshere/smallfile.txt");
f.delete();

它无法在webapp中运行。但是......它可以在一个独立的Java应用程序中运行,从同一个IDE运行。

也许Tomcat正在锁定文件夹,因为我之前已经读过(但只是通过实例化File()类)。我没有明确地使用流。

我也尝试过将commons.io库用于FileUtils.forceDelete(f),但仍然没有任何乐趣。