用递归实现目录删除和树形目录展示
来源:互联网 发布:爱情动画短片知乎 编辑:程序博客网 时间:2024/06/02 03:32
递归
所谓递归(Recursion),就是方法调用自身。
对于递归来说,一定有一个出口,让递归结束。这样才能保证不出现死循环。
关于递归,比较简单且典型的例子是计算阶乘、计算斐波那契数列等。
本文是在学习Java的File类时遇到的两个实际问题,一个是文件删除,另一个是将文件目录用树形结构显示(利用缩进),这两个问题都可以用递归解决。
解决删除文件的问题
File类中删除文件或目录的方法是:
public boolean delete()
如果要删除的是一个目录,则要求目录必须为空。这在很多时候是不能满足的,那么就需要进入到这个目录中,先将其中所有的子目录和文件都删除;对于其中不为空的子目录,又得继续进行这个过程,所以这是一个递归的过程。
程序实现如下:
import java.io.File;public class DeleteTest{ public static void deleteAll(File file) { if (file.isFile() || file.list().length == 0) { // 递归出口:如果file为文件或者空目录,则调用delete方法可以删除 file.delete(); } else { // 非空目录不能直接删除 // 获取待删除目录下的所有File对象 File[] files = file.listFiles(); for (File f : files) { // 删除里面的所有文件及目录 deleteAll(f); } // 删除本目录 file.delete(); } } public static void main(String[] args) { DeleteTest.deleteAll(new File("D://abc"));// 给出待删除的路径 // 注意:此处删除的文件不会进入回收站,而是直接删除,所以请谨慎 }}
展现树形目录
给定任意一个目录,以树形方式展现出该目录中的所有子目录和文件,每一层要加上缩进。
import java.io.File;public class TreeDirectoryTest{ public static int depth = 0; public static void deepList(File file) { if (file.isFile() || 0 == file.list().length) { if (file.isDirectory()) { // 目录后面加上\表示区分 System.out.println(getTabs(depth) + file.getName() + "\\"); } else { System.out.println(getTabs(depth) + file.getName()); } return; } else { System.out.println(getTabs(depth) + file.getName() + "\\"); File[] files = file.listFiles(); for (File f : files) { depth++; deepList(f); depth--;// 保持本层的depth不变 } } } // 得到合适的缩进 private static String getTabs(int number) { StringBuffer tabs = new StringBuffer(); for (int i = 0; i < number; ++i) { tabs.append("\t"); } return tabs.toString(); } public static void main(String[] args) { TreeDirectoryTest.deepList(new File("D:\\Media")); }}
程序还有很多待完善的地方,比如展示时可以加入排序,将目录排在同级的文件前面。
参考资料
圣思园张龙老师Java SE系列视频教程
0 0
- 用递归实现目录删除和树形目录展示
- js递归实现树形目录
- Java之File类及递归树形展示目录_20150804
- 利用递归创建目录和删除目录
- 递归调用实现目录树形结构
- 递归删除文件和目录
- 递归删除文件和目录
- 树形目录递归
- 递归实现删除文件或目录和 测试类程序
- [Linux C]递归遍历指定目录,以目录树形式展示
- java用递归删除目录
- java学习笔记 使用递归 将文件目录树形结构输出,递归删除目录 文件夹。
- 递归创建目录、删除目录
- 递归创建目录、删除目录
- java实现递归删除目录及目录下所有文件,递归和非递归方式都有
- java实现递归删除非空目录
- LinuxC语言实现递归删除目录
- 递归读目录,创建目录,级联删除代码实现
- HTTP请求和响应1:概述
- Ubuntu的目录结构
- Why Functional Programming Matters 函数式程序设计为什么至关重要
- 第十六周OJ项目B:有相同数字?
- Extjs 学习
- 用递归实现目录删除和树形目录展示
- IOS设计模式第九篇之备忘录模式 NSUserDefaults
- 《炉石传说》架构设计赏析(7):使用Google.ProtocolBuffers处理网络消息
- php调试时显示不全 chrome和firefox浏览器
- 编程之美读书笔记2.12—快速寻找满足条件的两个数
- WEB开发中“前端”和“后端”的区别
- C# RSA公钥与私钥的读取写入问题?
- poj 3683 Priest John's Busiest Day 2-sat
- 将toad里的数据库结构导出到pdm