例如:
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();
}
}
在上面的代码中,我试图找到里面没有文件的目录并删除,但它不会删除所有空白目录。
答案 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) {
}
}
}
}