递归
所谓递归(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系列视频教程。
相关推荐
用递归实现C#树形结构 ,用递归实现C#树形结构 ,
递归方式树形菜单实现递归方式树形菜单实现
springJpa单标递归树形结构
使用递归和dom遍历dom树形结构 完整代码
最近用到了需要显示树形结构,经过几个小时的瞎整,做出了个示例,从查询数据到显示,包括CRUD
树形下拉列表 递归实现 包含有 sql server 数据库脚本
linux 目录树实现代码,使用的是递归的算法
基于递归算法和树形控件的动态树形图的实现基于递归算法和树形控件的动态树形图的实现基于递归算法和树形控件的动态树形图的实现基于递归算法和树形控件的动态树形图的实现基于递归算法和树形控件的动态树形图的实现
Java递归算法构造JSON树形结构,Java递归算法构造JSON树形结构Java递归算法构造JSON树形结构
JAVA_SQL递归树形,用递归算法结合数据库对J2EE实现树结构
递归遍历目录并生成树的形式来展示信息,代码经调试通过,希望对新手有所帮助...
本篇文章主要介绍了vuejs使用递归组件实现树形目录的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Java递归将List转为树形结构 博客地址:https://blog.csdn.net/weixin_38500202/article/details/110456363
使用递归生成文件目录树 .txt 使用递归生成文件目录树 .txt
利用递归实现无限极目录展示,可点击展开和收起,基于jquery
oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的。这篇文章给大家介绍了Oracle递归树形结构查询功能,需要的朋友参考下
so easy,写了一个递归删除目录,但结果出乎意料,一个递归目录删除成功,而另外一个却删除失败,刚开始怀疑文件被占用问题,后来被排除了。后来尝试使用各种工具,文件粉碎机都不能解决。最后,通过重命名解决此...
c# 树形递归实例 ,初学C# 对树形控件和 递规有疑问的可以 下载学习
; charset=gb2312" language="java" import="java.sql.*" errorPage="" %> <!-- 数据库结构: 库名:test 表名:tree CREATE TABLE [dbo].[tree] ( [id] [int] IDENTITY (1, 1) NOT NULL , ...
易语言枚举目录文件到树形框源码,枚举目录文件到树形框,树形框_初始化,树形框_枚举目录,树型框_扩展事件,树型框_取项目索引,树型框_取子项目索引,内部调用_取目录路径,树型框_取文件路径