2010-10-21 105 views
8

在我的應用程序中,我編寫了從驅動器中刪除目錄的代碼,但是當我檢查File的刪除功能時,它不會刪除該文件。我已經寫了一些這樣的事無法通過Java刪除目錄

//Code to delete the directory if it exists 
File directory = new File("c:\\Report\\"); 
if(directory.exists()) 
directory.delete(); 

的directoryis不使用的仍是不能夠刪除目錄

回答

18
在Java中

鎖定,目錄刪除僅適用於空目錄,whi CH導致像下面的方法:

/** 
* Force deletion of directory 
* @param path 
* @return 
*/ 
static public boolean deleteDirectory(File path) { 
    if (path.exists()) { 
     File[] files = path.listFiles(); 
     for (int i = 0; i < files.length; i++) { 
      if (files[i].isDirectory()) { 
       deleteDirectory(files[i]); 
      } else { 
       files[i].delete(); 
      } 
     } 
    } 
    return (path.delete()); 
} 

這一個會刪除你的文件夾,即使非空,沒有煩惱(當該目錄是由OS鎖定除外)。

1

的目錄必須是空的將其刪除。如果不是空的,你需要與File.listFiles()和File.delete()

1

兩個其他的可能性(除了目錄不爲空)遞歸刪除:

  • 運行於用戶Java程序沒有寫入/刪除權限的目錄
  • 目錄用於/由不同的進程(你寫的不是,但怎麼有你證實了這一點?)
2

望着文檔:

如果此路徑名錶示一個目錄,然後將目錄必須是爲了空被刪除。

你確定目錄是空的(沒有隱藏的文件)嗎?

13

爲什麼要用遞歸方法刪除輪子?看看Apache Commons io。 https://commons.apache.org/proper/commons-io/javadocs/api-1.4/

FileUtils.deleteDirectory(dir); 

OR

FileUtils.forceDelete(dir); 

這就是你所需要的。 還有很多有用的方法來操縱文件...

+0

愛,當有東西已經寫好。完全同意。感謝您的提醒。 – Aaron 2012-02-10 17:41:39

+0

FileUtils#deleteDirectory和FileUtils#forceDelete實現它也遞歸地執行... – 2012-06-11 09:07:45