删除父目录如果没有文件,则使用子目录

时间:2015-05-18 05:18:27

标签: java file

我有一个父文件夹,其中有多个子目录,依此类推。我必须删除所有那些里面没有文件的目录和子目录。

例如:

A - parent (no file inside)
|
B-sub-dir (no file inside)
|
c- sub-dir of B (no file inside)
|
D- no file inside

在这种情况下,我必须删除父文件夹A

我试过这样的

    static List<File> fileListToDelete = new ArrayList<File>();
static List<File> getListOfBlankDirectoryToDelete(File parentFolder) {


    for (File fileentry : parentFolder.listFiles()) {

            if (fileentry.isDirectory()&& fileentry.listFiles().length == 0) {
                fileentry.delete();
            } else if (fileentry.isDirectory()) {
                getListOfBlankDirectoryToDelete(fileentry);
            }

    }

    return fileListToDelete;
}

static void deleteBlankDirectory(File parentFolder){
    List<File> fileListForDeletion = getListOfBlankDirectoryToDelete(parentFolder);
    for(File file : fileListForDeletion){
        file.delete();
    }
}

在上面的代码中,我试图找到里面没有文件的目录并删除,但它不会删除所有空白目录。

2 个答案:

答案 0 :(得分:2)

首先,您必须删除所有子文件夹,然后删除主文件夹。

删除主文件夹时,如果包含任何文件夹可能为空,则主文件夹无法删除。

我有一些示例代码可以删除所有子文件夹和主文件夹。

    File folder = new File("folder_path_to_delete");
    ArrayList<File> foldersToDelete = listFolders(folder);
    foldersToDelete.add(folder);
    for(File folderToDelete : foldersToDelete) {
        folderToDelete.delete();
    }
    System.out.println(foldersToDelete + "  deleted");

和方法listFolders(folder)就像这样

public static ArrayList<File> listFolders(File folder) {
    ArrayList<File> subFolders = new ArrayList<>();
    File[] folders = folder.listFiles(new FileFilter() {

        @Override
        public boolean accept(File pathname) {
            return pathname.isDirectory();
        }
    });
    for(File subFolder : folders) {
        subFolders.addAll(listFolders(subFolder));
    }
    subFolders.addAll(Arrays.asList(folders));
    return subFolders;
}

它会起作用..

注意:当任何子文件夹中有任何文件时,它将无法工作。它只会删除空白文件夹..

答案 1 :(得分:0)

你可以试试这个......

 private void deleteFileDIR(File file){
    if(file.isDirectory()){
        if(file.list().length==0){
            try{
            file.delete();
            }catch (Exception e) {
            }
        }else{
           String files[] = file.list();

           for (String temp : files) {
              File fileDelete = new File(file, temp);
              deleteFileDIR(fileDelete);
           }
           if(file.list().length==0){
             try{
             file.delete();
             }catch (Exception e) {
            }

           }
        }
    }