2014-09-24 43 views
3

我想編寫一個刪除所有空文件夾的函數,並且可以忽略某些文件類型(允許的文件類型存儲在散列映射中)並告訴它是否應該查看目錄內部。刪除Java中的所有空文件夾

呼喚:

HashMap<String, Boolean> allowedFileTypes = new HashMap<String, Boolean>(); 
allowedFileTypes.put("pdf", true); 
deleteEmptyFolders("ABSOLUTE PATH", allowedFileTypes, true); 

功能:

public static void deleteEmptyFolders(String folderPath, HashMap<String, Boolean> allowedFileTypes, boolean followDirectory) { 

    File targetFolder = new File(folderPath); 
    File[] allFiles = targetFolder.listFiles(); 


    if (allFiles.length == 0) 
     targetFolder.delete(); 

    else { 
     boolean importantFiles = false; 

     for (File file : allFiles) { 

      String fileType = "folder"; 
      if (!file.isDirectory()) 
       fileType = file.getName().substring(file.getName().lastIndexOf('.') + 1); 

      if (!importantFiles) 
       importantFiles = (allowedFileTypes.get(fileType) != null); 

      if (file.isDirectory() && followDirectory) 
       deleteEmptyFolders(file.getAbsolutePath(), allowedFileTypes, followDirectory); 
     } 

     // if there are no important files in the target folder 
     if (!importantFiles) 
      targetFolder.delete(); 
    } 
} 

的問題是,什麼也沒發生,即使它看上去通過,直到最後所有文件夾。這是一個好方法還是我完全錯過了一些東西?

+0

任何你使用HashMap而不是HashSet的原因? – aioobe 2014-09-24 13:00:48

+0

@aioobe現在你提到它。不,我會做成一套,因爲我只會檢查它是否爲空。謝謝。 – TomTom 2014-09-24 13:03:50

+1

也許這可以幫助你一點:http://stackoverflow.com/a/20281958/2496309 – 2014-09-24 13:04:30

回答

1

這段代碼遞歸地刪除所有的空文件夾或目錄:

public class DeleteEmptyDir { 
private static final String FOLDER_LOCATION = "E:\\TEST"; 
private static boolean isFinished = false; 

public static void main(String[] args) { 

    do { 
     isFinished = true; 
     replaceText(FOLDER_LOCATION); 
    } while (!isFinished); 
} 

private static void replaceText(String fileLocation) { 
    File folder = new File(fileLocation); 
    File[] listofFiles = folder.listFiles(); 
    if (listofFiles.length == 0) { 
     System.out.println("Folder Name :: " + folder.getAbsolutePath() + " is deleted."); 
     folder.delete(); 
     isFinished = false; 
    } else { 
     for (int j = 0; j < listofFiles.length; j++) { 
      File file = listofFiles[j]; 
      if (file.isDirectory()) { 
       replaceText(file.getAbsolutePath()); 
      } 
     } 
    } 
} 
} 
0

可以使用代碼來刪除使用Java空文件夾。

public static long deleteFolder(String dir) { 

     File f = new File(dir); 
     String listFiles[] = f.list(); 
     long totalSize = 0; 
     for (String file : listFiles) { 

      File folder = new File(dir + "/" + file); 
      if (folder.isDirectory()) { 
       totalSize += deleteFolder(folder.getAbsolutePath()); 
      } else { 
       totalSize += folder.length(); 
      } 
     } 

     if (totalSize ==0) { 
      f.delete(); 
     } 

     return totalSize; 
    } 
相關問題