Java非递归实现删除任意目录的方法

最近在学C#的文件系统, 发现C#的文件系统貌似比java的东西少一点, 居然连删除目录都直接做好封装了, 想到学java的时候还要自己写递归删除, 好像没写过非递归的,就在网上查了下, 关于非递归删除目录代码没几个, 我就写了一个,递归网上一大堆, 就不粘上来了. 下面是代码非递归的方法:

package demo1;

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);//模拟一个压栈的过程
  }
  //倒序遍历,模拟一个弹粘的过程
  for (int i = directoryList.size() - 1; i >= 0; i--) {
   directoryList.get(i).delete();
  }
  if(!root.exists()){
   System.out.println("您输入的是文件夹,已刪除成功");
  }
 }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java高效打印一个二维数组的实例(不用递归,不用两个for循环)

    打印1个元素,不让循环变量i++,走出思维定式(执行一次循环体,就i++).public class OneForPrint2DArr { public static void main(String[] args) throws Exception { int[][] a = { { 1, 2, 3 }, { 4, 5} }; for (int i = 0, j = 0; i < a.length;) { System.out.println(a[i][j]); j++; if (j >=

  • 全排列算法-递归与字典序的实现方法(Java)

    全排列算法-递归与字典序的实现方法(Java) 全排列: 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列.当m=n时所有的排列情况叫全排列. 例如: 1 .2 .3三个元素的全排列为: {1,2,3},{1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1}. ------------------------------------------------------ 解法1(递归) 如下图:要对1.2.3.4进行

  • Java递归遍历树形结构

    废话不多说了,直接给大家贴代码,具体代码如下所示: //菜单树形结构 public JSONArray treeMenuList(JSONArray menuList, int parentId) { JSONArray childMenu = new JSONArray(); for (Object object : menuList) { JSONObject jsonMenu = JSONObject.fromObject(object); int menuId = jsonMenu.ge

  • Java递归算法详解(动力节点整理)

    递归算法是一种直接或者间接调用自身函数或者方法的算法.Java递归算法是基于Java语言实现的递归算法.递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解.递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解.    递归算法解决问题的特点: 1)递归就是方法里调用自身.  2) 在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口.  3)递归算法解题通常显得很简洁,但递归算法解题的运行效率较低.所以一般不提倡用递归算法设计程序.  4)在递

  • Java递归方法求5!的实现代码

    题目:利用递归方法求5!. 程序分析:递归公式:fn=fn_1*4! 程序设计: import java.util.Scanner; public class Ex22 { public static void main(String[] args) { Scanner s = new Scanner(System.in); int n = s.nextInt(); Ex22 tfr = new Ex22(); System.out.println(tfr.recursion(n)); } pu

  • Java递归读取文件例子_动力节点Java学院整理

    Java递归列出目录下全部文件 /** * 列出指定目录的全部内容 * */ import java.io.*; class Recursion{ public static void main(String[] args) { String fileName="D:"+File.separator; File f=new File(fileName); printFile(f); } public static void printFile(File f){ if(f!=null){

  • Java 跳出递归循环问题解决办法

    使用异常跳出循环 1.如果方法体内含有需要抛出异常的对象,让方法直接抛出异常,不要在方法体内捕获 public void xxxx() throws Exception 2.如果方法体内不含有需要抛出异常的对象 class Test { static class StopMsgException extends RuntimeException { } public static void main(String args[]) { try { run(0); } catch (StopMsgE

  • Java基于循环递归回溯实现八皇后问题算法示例

    本文实例讲述了Java基于循环递归回溯实现八皇后问题.分享给大家供大家参考,具体如下: 运行效果图如下: 棋盘接口 /** * 棋盘接口 * @author Administrator * */ public interface Piece { abstract boolean isRow(int line); abstract boolean isCol(int line,int col); } 棋盘类: /** * 棋盘 * @author Administrator * */ public

  • Java使用递归解决算法问题的实例讲解

    解释:程序调用自身的编程技巧叫做递归. 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量.递归的能力在于用有限的语句来定义对象的无限集合. 递归的三个条件: 1.边界条件 2.递归前进段 3.递归返回段 当边界条件不满足时,

  • Java递归算法经典实例(经典兔子问题)

    题目:古典问题:3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 分析:首先我们要明白题目的意思指的是每个月的兔子总对数:假设将兔子分为小中大三种,兔子从出生后三个月后每个月就会生出一对兔子, 那么我们假定第一个月的兔子为小兔子,第二个月为中兔子,第三个月之后就为大兔子,那么第一个月分别有1.0.0,第二个月分别为0.1.0, 第三个月分别为1.0.1,第四个月分别为,1.1.1,第五个月分别为2.1.2,第六个月分别为3.2.3,第

随机推荐