2010-07-26 53 views
4

我的java代码无法删除系统硬盘上的文件。Java代码无法删除文件

每当file.delete()函数被调用时,它将返回false。 任何想法,为什么会发生这种情况?

+0

哪个用户是java运行的? 该用户是否需要删除该文件的权限? 你正在运行一个应用程序或一个小程序? – andcoz 2010-07-26 10:09:22

回答

5

File.delete()如果您试图删除非空目录,或者在调用时命名文件根本不存在,则可以返回false

(如果有权限问题,则会引发SecurityException)

1

通常的原因是权限不足(虽然通常会抛出异常),试图删除一个不存在的文件或尝试删除非空目录。您完全确定您有权删除您要删除的文件吗?

1

某些进程可能正在读取/写入文件,因此它被锁定。或者,您的进程无权删除该文件。如果文件是目录,则必须首先删除其中的所有文件,然后才能删除该目录。最后是文件不存在的情况,所以delete方法将返回false。

1

Windows?使用Process Explorer搜索在文件上保留句柄(锁定)的所有进程(或者如果这是其中任何文件的目录)。

在Linux上,使用fuser

+1

在Linux上打开文件不会阻止该文件被解除链接。 – sarnold 2010-07-26 10:12:44

+0

你也可以在Linux上锁定文件,但很少使用。另外,NFS挂载可以防止文件被删除。 – 2010-07-26 10:16:52

12

File.delete()可能无法删除文件的原因有很多,包括:

  • 你没有正确的权限以删除文件
  • 该文件所代表的目录和目录不是空
  • 该文件被另一个进程(比方说在甚至通过相同的工艺未封闭FileOutputStream)锁定,
  • 的文件不存在
+1

+1没有遇到未关闭的FOS,但:-) – 2010-07-26 10:17:56

+1

@Aaron Digulla:未关闭的文件只会在某些操作系统(如Windows)上导致问题。在具有Posix文件系统语义的系统上,即使文件被其他东西打开,文件也可以始终未被链接。 – 2010-07-26 10:20:31

+1

更多的可能性是1)该文件位于已安装的设备上只读,或2)您不幸遇到光盘I/O错误。 (这里也不是这样,但为了完整起见...) – 2010-07-26 11:11:45

0

您可能试图删除C:Drive中存在的任何文件,并且您可能没有权限执行此操作。尝试将它放在C:之外的任何其他驱动器中,然后运行您的代码。希望对你有效。 :)

2

我在我的代码中有同样的问题,并发现罪魁祸首实际上是一个未关闭的FileInputStream。关闭FIS后,我的文件删除没有任何问题。我希望这可以帮助别人。