递归
所谓递归(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系列视频教程。
相关推荐
### 使用递归与DOM遍历DOM树形结构 在现代Web开发中,处理XML文档是一项常见任务。DOM(Document Object Model)是一种广泛采用的技术,用于表示XML或HTML文档的结构,使得开发者能够轻松地访问、修改文档中的元素...
这个任务可以通过使用MFC(Microsoft Foundation Classes)中的`CTreeCtrl`控件来实现,它提供了一个树形视图,可以用于展示目录结构。同时,`GetModuleFileName`函数可能用于获取当前运行程序的路径,而“folder”...
"易语言枚举目录文件到树形框"是一个在易语言环境中实现的功能,它涉及到文件系统操作和图形用户界面(GUI)的设计。 首先,我们要理解枚举目录文件的概念。在计算机编程中,枚举目录文件是指遍历指定目录下的所有...
本篇文章详细介绍了如何利用Vue.js的递归组件来实现树形目录结构,这种结构在展示具有层级关系的数据时非常常见。 ### 树形目录的实现原理 实现树形目录的基本思路是将每个节点看作是一个组件,如果这个节点拥有子...
在易语言编程中,"利用树形框展示文件目录源码"是一个常见的需求,它涉及到图形用户界面(GUI)的设计和文件系统操作。易语言,作为一款中文编程环境,为初学者提供了简单直观的语法,使得这样的任务变得相对容易。...
本示例将介绍如何使用Node.js和Express来递归实现一个树形结构的演示,包括创建、读取、更新和删除(CRUD)操作。 首先,我们需要安装必要的依赖库。Express当然是基础,除此之外,可能还需要像Mongoose这样的库来...
以上就是使用JavaScript实现树形目录的基本思路和关键代码。在实际项目中,你可能需要根据具体需求对这些代码进行调整和优化,例如添加动画效果、支持拖放操作、搜索功能等。同时,考虑到性能和复杂性,对于大型数据...
生成.NET Treeview的树形结构,特别是通过递归方法,是一种高效且灵活的方法,适用于各种层次化数据的展示。递归遍历数据并创建节点,可以轻松地构建复杂的数据结构。同时,利用增强型的`BindingTreeView`组件,可以...
最后,提供的源码应该包括了上述的SQL查询、递归构建树形结构的代码,以及SpringBoot应用的配置和路由设置。通过这种方式,开发者可以快速理解和复用这个功能。 总之,通过SpringBoot与MyBatis Plus的结合,我们...
Java递归树型结构通用数据库是指使用Java语言实现的递归树型结构数据库系统,该系统可以实现树型结构的部门管理,包括部门的添加、删除、修改和查询等操作。 知识点: 1. 递归树型结构数据库设计 在Java递归树型...
本实例重点展示了如何利用树形控件来显示计算机的磁盘目录结构,并允许用户通过双击节点来查看其下级目录。这个功能在文件管理器、应用程序设置界面等许多场景中都非常常见,它提供了直观且易于操作的方式来探索复杂...
解析JSON数据并构造树形结构可以使用递归函数: ```javascript function buildTree(data) { let tree = new TreeNode(data.value); data.children.forEach(childData => { tree.addNode(buildTree(childData)); ...
在本项目中,"struts2动态树形目录"实现了这一功能,用户可以通过界面动态地创建、编辑和删除目录。 首先,让我们深入了解一下Struts2框架。Struts2基于拦截器模式,提供了丰富的插件和拦截器,支持多种视图技术如...
3. 使用递归或迭代方法构建树形结构,这可以通过添加子节点到父节点的集合来完成。 4. 如果需要修改权限树,比如添加、删除或移动节点,相应地更新数据库中的数据。 5. 保存更改到数据库,确保权限信息的正确性。 ...
1. 使用DOM操作:通过创建和修改HTML元素,可以将树形结构可视化展示在网页上。 2. 第三方库:如D3.js,可以帮助轻松绘制复杂的可视化图表,包括树状图。 七、树形结构的应用 - 文件系统:模拟目录和文件的层次结构...
在Android开发中,树形目录(Tree-like Directory)是一种常见的数据结构,用于组织和展示文件系统中的文件和目录。在Android应用中,特别是在文件管理器或者涉及到文件操作的场景,理解如何构建和操作树形目录至关...
在Java编程中,生成树形文件目录是一项常见的任务,它涉及到文件系统操作和数据结构...通过这种方式,你可以用Java程序构建出一个功能完善的树形文件目录,无论是在命令行还是图形界面,都能清晰地展示文件系统的结构。
"用树形控件管理文件夹源码"的主题聚焦于如何利用树形控件这一UI元素来展示和管理计算机上的文件系统结构。树形控件是一种常见的图形用户界面组件,它以层级结构显示数据,非常适合用来表示文件夹和文件的层次关系。...
综上所述,"无限级联树形目录"项目结合了前端的jQuery和zTree插件,后端的S2SH框架以及MySQL数据库,实现了动态展示和操作无限级别的目录结构。通过这个系统,用户可以方便地浏览、管理和更新复杂层次的数据。
在IT行业中,树形菜单是一种常见的用户界面元素,尤其在数据层级结构复杂的应用程序中,如文件管理系统、组织架构展示或导航菜单等。本项目主要实现了基于Java的树形菜单,并集成了完整的增删改查功能,使得开发者...