我在最近的工作中,由于实际的工作内容的需要,最近使用递归方法非常频繁。
比如,在对整个非空目录进行删除操作的时候,往往调用boolean bool = file.delete();方法是不能够成功的(因为,目录非空,删除会失败),只有将目录中的底层文件一个个删除完毕,使整个目录成为空目录的时候,才能调用boolean bool = file.delete();方法将目录删除,这样就能删除成功了。
public static void deleteFileByEveryFile(String filePath){
if (filePath!=null && !filePath.equals("")) {
File file = new File(filePath);
if (file.isDirectory()) {
System.out.println("为目录类型");
File[] subFiles = file.listFiles();
if (subFiles!=null && subFiles.length>0) {
for (int i = 0; i < subFiles.length; i++) {
File chileFile = subFiles[i];
if (chileFile.isDirectory()) {
deleteFileByEveryFile(chileFile.getAbsolutePath());
} else {
File parentFile = chileFile.getParentFile();
boolean bool = chileFile.delete();
if (!bool) {
System.out.println("删除失败:"+chileFile.getAbsolutePath());
}
deleteFileByEveryFile(parentFile.getAbsolutePath());
}
}
} else {
File parentFile = file.getParentFile();
//如果为空目录,删除这个目录
boolean bool = file.delete();
if (!bool) {
System.out.println("删除空目录失败"+file.getAbsolutePath());
}
//不能再调用递归方法,否则会删除你磁盘中的其他所有文件的
//deleteFileByEveryFile(parentFile.getAbsolutePath());//注意就是这里
parentFile.delete();
}
} else {
System.out.println("为文件类型");
boolean bool = file.delete();
if (!bool) {
System.out.println("删除失败:"+file.getAbsolutePath());
}
}
}
}
public static void main(String[] args) {
deleteFileByEveryFile("D:\\TestDir");
}
==================OVER=====================