2010-07-26 108 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後,我的文件刪除沒有任何問題。我希望這可以幫助別人。