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

  1. package demo1;
  2.  
  3. import java.io.File;
  4. import java.util.ArrayList;
  5.  
  6. public class Demo1 {
  7. /**
  8. * 不使用递归删除目录
  9. * @param args
  10. */
  11. public static void main(String[] args) {
  12. deleteDirectory("E:\\test");
  13. }
  14.  
  15. public static void deleteDirectory(String rootPath) {
  16. //fileList模拟的是一个队列
  17. ArrayList<File> fileList = new ArrayList<File>();//存储文件和直接子目录包含文件的目录
  18. //directoryList模拟的是一个栈
  19. ArrayList<File> directoryList = new ArrayList<File>();//存储直接子目录不包含文件的目录
  20. File root = new File(rootPath);
  21. if(!root.exists()){
  22. System.out.println("您输入的不是目录");
  23. return;
  24. }
  25. if(root.isFile()){
  26. root.delete();
  27. System.out.println("您输入的是文件,已删除成功");
  28. return;
  29. }
  30. fileList.add(0, root);//第一次入队列
  31.  
  32. while(fileList.size() > 0) {
  33. File dir = fileList.remove(0);//模拟一个出队列的过程 【出队列的也许文件,也许是目录】
  34. File[] files = dir.listFiles();
  35. for (int i = 0; i < files.length; i++) {
  36. if(files[i].isFile()) files[i].delete();//如果是文件就删除
  37. else fileList.add(files[i]);//模拟一个入队列的过程 【如果是目录就入队列】
  38. }
  39. directoryList.add(dir);//一次遍历完毕,删除了第一级的文件,模拟一个压栈的过程【压栈的肯定是目录,而且直接子目录不包含文件】
  40. }
  41. //倒序遍历,模拟一个弹粘的过程
  42. for (int i = directoryList.size() - 1; i >= 0; i--) {
  43. directoryList.get(i).delete();
  44. }
  45. if(!root.exists()){
  46. System.out.println("您输入的是文件夹,已刪除成功");
  47. }
  48. }
  49.  
  50. }

其实使用 LinkedList 会更好一点,因为没有查询的过程,只有增删。

Java实现非递归删除目录的更多相关文章

  1. Java实现非递归归并排序

    public class nonRecursiveMergeSort { public static void main(String[] args) { int[] list = {8,4,3,6, ...

  2. 算法笔记_013:汉诺塔问题(Java递归法和非递归法)

    目录 1 问题描述 2 解决方案  2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...

  3. 排序算法练习--JAVA(插入、直接选择、冒泡、快速排序、非递归快速排序)

    排序算法是数据结构中的经典算法知识点,也是笔试面试中经常考察的问题,平常学的不扎实笔试时候容易出洋相,回来恶补,尤其是碰到递归很可能被问到怎么用非递归实现... package sort; impor ...

  4. 自己写算法---java的堆的非递归遍历

    import java.io.*; import java.util.*; public class Main { public static void main(String args[]) { S ...

  5. 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,循环控制及其优化

    上两篇博客 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现 研究了递归方法实现回溯,解决N皇后问题,下面我们来 ...

  6. 数据结构二叉树的递归与非递归遍历之java,javascript,php实现可编译(1)java

    前一段时间,学习数据结构的各种算法,概念不难理解,只是被C++的指针给弄的犯糊涂,于是用java,web,javascript,分别去实现数据结构的各种算法. 二叉树的遍历,本分享只是以二叉树中的先序 ...

  7. 二叉树3种递归和非递归遍历(Java)

    import java.util.Stack; //二叉树3种递归和非递归遍历(Java) public class Traverse { /******************一二进制树的定义*** ...

  8. JAVA 遍历文件夹下的所有文件(递归调用和非递归调用)

    JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...

  9. Java - 二叉树递归与非递归

    树的定义具有递归特性,因此用递归来遍历比较符合特性,但是用非递归方式就比较麻烦,主要是递归和栈的转换. import java.util.Stack; /** * @author 李文浩 * @ver ...

随机推荐

  1. NMEA-0183协议解析

    NMEA-0183 NMEA 0183是美国国家海洋电子协会(National Marine Electronics Association )为海用电子设备制定的标准格式.目前业已成了GPS导航设备 ...

  2. look look C#7

    vs2017也rc好几个版本了,本想跟进看看c#7加入了什么内容,去搜索c#7,确实找到了不少文章,无奈很多特性ide根本不让编译啊...所以今天主要列出已经确定了的c#7特性(一般来说rc后也不会加 ...

  3. nagios安装及监控Linux主机

    服务端的操作:##################################安装lamp环境及依赖包##########################   24  rpm -ivh gd-de ...

  4. Android jni 编程3(对基本类型一维整型数组的操作)总结版

    主要学习资料:黑马程序员的NDK方法使用(生产类库so)              jni编程指南中文版(已上传至博客园) 博主文章(它使用的是VS和eclipse联合开发):http://www.c ...

  5. 用手机或外部设备在同一局域网下访问虚拟主机wampsever的方法版本号是2.4.9

    1,首先在虚拟服务器电脑上可以打开http://localhost/ 2,在外部设备访问时报错为:You don't have permission to access / in on this se ...

  6. SQL SPLIT2

    CREATE   FUNCTION  F_SQLSERVER_SPLIT( @Long_str   varchar ( 8000 ), @split_str   varchar ( 100 ))    ...

  7. Java 程序测试_判断语句

    package test; public class Condition_Phase { public static void main (String[] args) { //The Traditi ...

  8. make: Nothing to be done for `all'

    最近安装fastdfs,执行make.sh时,出现  Nothing to be done for `all' 在网上搜了一下,大部分是说 用 make clean 清除以前编译产生的目标文件. 我试 ...

  9. 探索Javascript设计模式---单例模式

    最近打算系统的学习javascript设计模式,以便自己在开发中遇到问题可以按照设计模式提供的思路进行封装,这样可以提高开发效率并且可以预先规避很多未知的问题. 先从最基本的单例模式开始. 什么是单例 ...

  10. Appuim源码剖析(Bootstrap)

    Appuim源码剖析(Bootstrap) SkySeraph Jan. 26th 2017 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph个人站点:www. ...