java递归删除文件和文件夹

本文介绍了一个Java实现的文件删除工具类,该工具可以递归地删除指定目录下的所有文件及子目录。通过递归访问所有文件和文件夹,并采用倒序方式确保文件夹在被清空后再被删除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class DelFileTest()
{


private static File m_root; //记录要删除的路径
private static ArrayList m_dirs;

/**
* 功能:获取所有文件和文件夹,存储在m_dirs中
* 注意:递归调用
* @param tempRoot 文件路径
*/
private void visitAll(File tempRoot){
try{
//获取指定路径下的所有文件
File[] dirs=tempRoot.listFiles();

if(dirs!=null){
//将文件数组转换成List对象
List dirslist=Arrays.asList(dirs);

//将dirslist完全添加到m_dirs中
m_dirs.addAll(dirslist);

//递归调用
for(int i=0 ; i<dirslist.size() ; i++){
this.visitAll((File)dirslist.get(i));
}
}
}catch(Exception ex){
System.out.println("error in visitAll : "+ex.getMessage());
}

}


/**
* 功能:删除文件或文件夹
* 注意:使用倒叙删除,先删除文件,然后删除空文件夹
*/
private void rootDelete(){
try{
if(m_dirs!=null){
//使用倒叙循环删除(先删除文件,再删除文件夹)
for(int i=m_dirs.size()-1 ; i>=0 ; i--){
File f=(File)m_dirs.remove(i);//获取之后删除list中的数据
//删除数据
if(!f.delete()){
System.out.println("文件路径:"+f.toString()+" 不存在");
}
}
}else{
System.out.println("获取文件list列表(m_dirs)为空");
}
}catch(Exception ex){
System.out.println("error in rootDelete : "+ex.getMessage());
}
}


/**
* 功能:删除文件夹方法
* @param dir 要删除的文件夹路径(java.io.File类型)
*/
private void deleteDirs(java.io.File dir){
try{
m_root=dir;
m_dirs= new ArrayList();

if(!m_root.isDirectory()){ //判断输入的是否为路径
System.out.println(m_root.toString()+" 不是路径");
}else{
//输出m_dirs中记录的值
//for(int i=0 ; i<m_dirs.size() ; i++){
// System.out.println(((File)m_dirs.get(i)).toString());
//}
m_dirs.add(m_root);

this.visitAll(m_root); //获取指定路径下的所有文件已经文件夹(递归调用)
this.rootDelete(); //删除list中的所有文件(倒叙循环删除)
}
}catch(Exception ex){
System.out.println("error in deleteDirs : "+ex.getMessage());
}
}


public static void main(String[] args)
{
File tmp = new File("d:/temp"); //这个文件夹事先自己先建好!
this.deleteDirs(tmp);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值