2011-12-02 32 views
1

我想o刪除整個目錄。我搜索了,我正在使用this代碼,我可以刪除目錄中的所有內容,但目錄仍然存在。這裏是我的確切代碼,以防萬一我失去了一些東西。Android刪除目錄不工作

public boolean DeletePoint(String JobName, String PointName){ 
    //Delete actual contents and file 
    File folder = new File(rootSaveFolder "/" + PointName+"/"); 
    boolean returnBool = false; 
    try{ 
     returnBool = deleteDirectory(folder); 
     folder.delete(); 
    } catch (SecurityException e){ 
     e.printStackTrace(); 
    } 
} 

static public boolean deleteDirectory(File path) { 
    if(path.exists()) { 
     File[] files = path.listFiles(); 
     if (files == null) { 
      return true; 
     } 
     for(int i=0; i<files.length; i++) { 
     if(files[i].isDirectory()) { 
      deleteDirectory(files[i]); 
     } 
     else { 
      files[i].delete(); 
     } 
     } 
    } 
    return(path.delete()); 
    } 

因爲我刪除了文件中的字符串是:到/ mnt/SD卡/測試/ GG/

我有嘗試過了最後的「/」,並且也不能工作。

回答

1

你確定你的目錄是空的嗎?您不能刪除非空目錄。

+0

是我肯定它是空的。 – CornCat

+0

@Patrick我在代碼中看不到File.length()方法的任何用法。 – user802421

0

您是否在清單中設置了適當的權限 - WRITE_EXTERNAL_STORAGE。有時容易忽視:/

看看源的話題,我想那傢伙得到它的工作...

來源:Delete a folder on SD card

+0

是的,我在清單中定義了它。它仍然會刪除其他所有內容,但它只保留文件夾。 – CornCat

0

你是如何驗證的文件夾剩下的?有時DDMS文件瀏覽器不同步,您需要刷新它,然後才能看到目錄消失。

+0

我正在使用Atro查看SD卡,並且還將SD安裝到了我的計算機上。兩者仍然顯示目錄 – CornCat

1

這是你的問題;

您的遞歸幾乎是正確的... 這是問題所在。

如果files [i]是一個目錄,(你理所當然地去清除其中的所有內容) 但是,一旦文件[i]中的「everything」被刪除,你實際上並沒有刪除文件[i]。

所以遞歸是不完整的; 您需要做的是在forloop內刪除 「else」 。

這樣,當文件[i]是一個目錄時,在所有內容都被刪除後,它將被清除。你剛剛離開它。

更具體:

public void deleteFile(String uri) 
{ 
    File currentFile = new File(uri); 
    File files[] = currentFile.listFiles(); 
    for (int i = 0; i < files.length; i++) 
    { 
      if (files[i].isDirectorty()) 
      { 
       deleteFiles(files[i].toString()); 
      } 
      //no else, or you'll never get rid of this folder! 
      files[i].delete(); 
    } 
} 
0
try { 
    File tempFolder = new File(path); 

    for (File f : tempFolder.listFiles()){ 
     if (!f.isDirectory()) { 
      f.delete(); 
     } 
     tempFolder.delete(); 
    } 

} catch (Exception e) { 
    e.printStackTrace(); 
}