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("您输入的是文件夹,已刪除成功");
}
} }
其实使用 LinkedList 会更好一点,因为没有查询的过程,只有增删。
Java实现非递归删除目录的更多相关文章
- Java实现非递归归并排序
public class nonRecursiveMergeSort { public static void main(String[] args) { int[] list = {8,4,3,6, ...
- 算法笔记_013:汉诺塔问题(Java递归法和非递归法)
目录 1 问题描述 2 解决方案 2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...
- 排序算法练习--JAVA(插入、直接选择、冒泡、快速排序、非递归快速排序)
排序算法是数据结构中的经典算法知识点,也是笔试面试中经常考察的问题,平常学的不扎实笔试时候容易出洋相,回来恶补,尤其是碰到递归很可能被问到怎么用非递归实现... package sort; impor ...
- 自己写算法---java的堆的非递归遍历
import java.io.*; import java.util.*; public class Main { public static void main(String args[]) { S ...
- 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,循环控制及其优化
上两篇博客 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现 研究了递归方法实现回溯,解决N皇后问题,下面我们来 ...
- 数据结构二叉树的递归与非递归遍历之java,javascript,php实现可编译(1)java
前一段时间,学习数据结构的各种算法,概念不难理解,只是被C++的指针给弄的犯糊涂,于是用java,web,javascript,分别去实现数据结构的各种算法. 二叉树的遍历,本分享只是以二叉树中的先序 ...
- 二叉树3种递归和非递归遍历(Java)
import java.util.Stack; //二叉树3种递归和非递归遍历(Java) public class Traverse { /******************一二进制树的定义*** ...
- JAVA 遍历文件夹下的所有文件(递归调用和非递归调用)
JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...
- Java - 二叉树递归与非递归
树的定义具有递归特性,因此用递归来遍历比较符合特性,但是用非递归方式就比较麻烦,主要是递归和栈的转换. import java.util.Stack; /** * @author 李文浩 * @ver ...
随机推荐
- [html5]学习笔记一 新增的非主体结构元素
html新增加的非主体结构元素,主要是用来表示附加信息的,包括header,footer,hgroup,address元素. 1.header元素 header元素是一种具有引导和导航作用的结构元素, ...
- Linux 菜鸟学习笔记--系统分区
硬盘分区 常识 主分区:最多只能有4个 扩展分区:用于突破主分区最多4个的限制 *最多只能有1个 *主分区+扩展分区最多有4个 *不能写入数据,只能包含逻辑分区 逻辑分区 格式化:实际是写入文件系统, ...
- 第二章:在HTML中使用JavaScript
1:在使用<script>嵌入JavaScript代码死,记住不要在代码中的任何地方出现"</script>"字符串 例如,浏览器在加载下面所示代码时就会产 ...
- XmlHepler(拿去就能用)
[系列目录](./XmlCatalog.html) 前言 本篇是这个系列的最后一篇.也是本人第一次写系列文章,虽然系列中大部分内容都是参考网络,但是自己都有敲代码验证.自己再编写过程中也学习到了很多知 ...
- Swift 内存管理详解
Swift内存管理: Swift 和 OC 用的都是ARC的内存管理机制,它们通过 ARC 可以很好的管理对象的回收,大部分的时候,程序猿无需关心 Swift 对象的回收. 注意: 只有引用类型变量所 ...
- c语言中,有符号数位移
#include <stdio.h> int main(void) { unsigned i = 0xcffffff3; long j=0xcffffff3; int k=0xcfffff ...
- SpringBoot实践 - SpringBoot+mysql
关于springBoot是个神马东西以及优缺点,请自行搜索了解. LZ看到很多关于SpringBoot的Demo,单看一篇总是没法整合SpringBoot与Mysql.没法子,还是自己操刀来一发为妙. ...
- angular ui-router 正则
{id:[0-9a-fA-F]{1,8}} 如果在找ui-router 时,会看到以上的正则 我解释一下 id是param,可以把必备的结果收起来 []里面的必配的正则,但只是给一个string {} ...
- JavaScript中的文档模式和严格模式
JavaScript中的文档模式和严格模式 语法模式有普通模式和严格模式两种 普通模式:正常的JavaScript语法拼写以及代码编写(相对于严格模式存在着语法上的不严谨),尽可能的识别错误以及不规范 ...
- 对spring,struts,hibernate及MVC的理解
对于spring,hibernate,struts等框架,刚开始的时候总是会很迷茫,不知道他们是用来做什么的. 1.对框架的作用理解 个人认为框架的作用是把代码进行了分类,减少了代码的耦合性. 如果不 ...