您的位置:首页 > 编程语言 > Java开发

java实现递归删除目录及目录下所有文件,递归和非递归方式都有

2017-12-22 20:24 1031 查看
public void delete(String path){
File f=new File(path);
if(f.isDirectory()){//如果是目录,先递归删除
String[] list=f.list();
for(int i=0;i<list.length;i++){
delete(path+"//"+list[i]);//先删除目录下的文件
}
}
f.delete();
}

非递归:

import java.io.File;
import java.util.ArrayList;
public class Demo1 {
/**
* 不使用递归删除目录
* @param args
*/
public static void main(String[] args){
deleteDirectory("E:\\test");
}
public static void deleteDirectory(String rootPath) {
//fileList模拟一个队列
ArrayList<File> fileList = new ArrayList<File>();//儲存文件和直接子目錄包含文件的目錄
//directoryList 模拟一个栈
ArrayList<File> directoryList = new ArrayList<File>();//存儲直接子目錄中不包含文件的目錄
File root = new File(rootPath);
if(!root.exists()){
System.out.println("您输入的不是目录");
return;
}
if(root.isFile()){
root.delete();
System.out.println("您输入的是文件,已删除成功");
return;
}
fileList.add(0, root);
while(fileList.size() > 0) {
//模拟一个出队列的功能
File dir = fileList.remove(0);
File[] files = dir.listFiles();
for (int i = 0; i < files.length; i++) {
if(files[i].isFile()) files[i].delete();
else fileList.add(files[i]); //模拟一个入队列的功能
}
directoryList.add(dir); //模拟一个压栈的过程
}//跳出了while循环,说明所有的file都被删除了,只剩下directory了
//倒叙遍历directoryList ,模拟一个弹栈的过程,
for (int i = directoryList.size() - 1; i >= 0; i--) {
directoryList.get(i).delete();
}
if(!root.exists()){
System.out.println("您輸入的是文件夾,已刪除成功");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: