2015-09-27 69 views
0

我盯着整理和清潔我的電話,和我開始做的第一件事是一個「空文件夾清潔」的Android應用程序,我認爲這將是容易的,而實際上它很容易,但我想更進一步......刪除空文件夾算法

Ccleaner,例如,只搜索空文件夾,這意味着如果有一個文件夾只有一個空文件夾裏面左右,你將需要使用它2次,因爲包含空文件夾的文件夾在清理後將爲空,用我的代碼檢查文件夾中是否只包含空文件夾,並且它適用於簡單情況,例如內部有兩個空文件夾的文件夾,但當文件夾更深時,它不會像它應該那樣工作。

我想知道,如果一個文件夾爲空,如果一個文件夾是安全地刪除,因爲它只有空文件夾。

如果我有輸出一個文件夾裏面的文件夾是這個:

Empty Folder: /storage/emulated/0/Folder1/Folder2 
Folder safe to remove (only empty folders inside):/storage/emulated/0/Folder1 

但隨着3 ...

Empty Folder: /storage/emulated/0/Folder1/Folder2/Folder3 
Folder safe to remove (only empty folders inside): /storage/emulated/0/Folder1/Folder2 

忽略第一個(Folder1

下面是方法:

private void getAllEmptyFoldersOfDir(File directory) { 
    //Log.d(TAG, "Folder: " + directory.getAbsolutePath() + "\n"); 
    int emptyFoldersCount = 0; 
    final File[] files = directory.listFiles(); 
    if (files != null) { 
     for (File file : files) { 
      if (file != null) { 
       if (file.getName().equals("Android") && file.isDirectory()) { 
        //We need to exclude this folder 
        continue; 
       } 
       if (file.isDirectory()) { 
        if (file.listFiles().length > 0) { 
         getAllEmptyFoldersOfDir(file); 
         continue; 
        } 
        emptyFoldersCount++; 
        Log.d(TAG, "Empty Folder: " + file.getAbsolutePath() + "\n"); 
       } 
      } 
     } 
     if (files.length == emptyFoldersCount) 
      Log.d(TAG, "Folder safe to remove (only empty folders inside): " + directory.getAbsolutePath() + "\n"); 
    } 

} 

任何幫助表示讚賞,我的英語不好,所以任何編輯也是讚賞!

回答

1

這是我想出了:

boolean getAllEmptyFoldersOfDir(File current){ 
    if(current.isDirectory()){ 
     File[] files = current.listFiles(); 
     if(files.length == 0){ //There is no file in this folder - safe to delete 
      System.out.println("Safe to delete - empty folder: " + current.getAbsolutePath()); 
      return true; 
     } else { 
      int totalFolderCount = 0; 
      int emptyFolderCount = 0; 
      for(File f : files){ 
       if(f.isDirectory()){ 
        totalFolderCount++; 
        if(getAllEmptyFoldersOfDir(f)){ //safe to delete 
         emptyFolderCount++; 
        } 
       } 

      } 
      if(totalFolderCount == files.length && emptyFolderCount == totalFolderCount){ //only if all folders are safe to delete then this folder is also safe to delete 
       System.out.println("Safe to delete - all subfolders are empty: " + current.getAbsolutePath()); 
       return true; 
      } 
     } 
    } 
    return false; 
} 

每當一個文件夾安全地刪除,此方法返回true。因此,無論何時執行遞歸調用,首先掃描所有子文件夾並驗證它們是空的。僅當所有子文件夾都爲空(emptyFolderCount == totalFolderCount)時,文件夾本身才可安全刪除。

+1

謝謝,但是,1,這是行不通的(它說所有文件夾可以安全刪除),和2,我想知道,如果一個文件夾爲空,如果一個文件夾是安全地刪除,因爲它只有空文件夾,我會更新我的問題。 –

+0

這個方法可以實現「從哪個文件夾刪除安全嗎?」例如,如果我給你我的目錄路徑然後通過掃描一次方法可以決定是否所有文件夾,我們可以很容易地刪除和所有不能被刪除 – dex

+0

啊,做了一個小的失誤,不得不做額外的檢查,看是否該文件夾可能包含文件和文件夾。編輯答案。這種方法輸出所有可以安全刪除的文件夾,這是在這裏問的問題吧? –