`
yuanzher
  • 浏览: 30729 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

【转】用递归实现目录删除和树形目录展示

阅读更多

递归

  所谓递归(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树形结构

    ### 使用递归与DOM遍历DOM树形结构 在现代Web开发中,处理XML文档是一项常见任务。DOM(Document Object Model)是一种广泛采用的技术,用于表示XML或HTML文档的结构,使得开发者能够轻松地访问、修改文档中的元素...

    递归遍历目录并生成树

    这个任务可以通过使用MFC(Microsoft Foundation Classes)中的`CTreeCtrl`控件来实现,它提供了一个树形视图,可以用于展示目录结构。同时,`GetModuleFileName`函数可能用于获取当前运行程序的路径,而“folder”...

    易语言枚举目录文件到树形框

    "易语言枚举目录文件到树形框"是一个在易语言环境中实现的功能,它涉及到文件系统操作和图形用户界面(GUI)的设计。 首先,我们要理解枚举目录文件的概念。在计算机编程中,枚举目录文件是指遍历指定目录下的所有...

    vuejs使用递归组件实现树形目录的方法

    本篇文章详细介绍了如何利用Vue.js的递归组件来实现树形目录结构,这种结构在展示具有层级关系的数据时非常常见。 ### 树形目录的实现原理 实现树形目录的基本思路是将每个节点看作是一个组件,如果这个节点拥有子...

    易语言利用树形框展示文件目录源码

    在易语言编程中,"利用树形框展示文件目录源码"是一个常见的需求,它涉及到图形用户界面(GUI)的设计和文件系统操作。易语言,作为一款中文编程环境,为初学者提供了简单直观的语法,使得这样的任务变得相对容易。...

    nodejs+express递归实现树形结构demo

    本示例将介绍如何使用Node.js和Express来递归实现一个树形结构的演示,包括创建、读取、更新和删除(CRUD)操作。 首先,我们需要安装必要的依赖库。Express当然是基础,除此之外,可能还需要像Mongoose这样的库来...

    js 实现的树形目录

    以上就是使用JavaScript实现树形目录的基本思路和关键代码。在实际项目中,你可能需要根据具体需求对这些代码进行调整和优化,例如添加动画效果、支持拖放操作、搜索功能等。同时,考虑到性能和复杂性,对于大型数据...

    运用递归生成树形结构 Treeview

    生成.NET Treeview的树形结构,特别是通过递归方法,是一种高效且灵活的方法,适用于各种层次化数据的展示。递归遍历数据并创建节点,可以轻松地构建复杂的数据结构。同时,利用增强型的`BindingTreeView`组件,可以...

    SpringBoot + MyBatis Plus 递归获取树形菜单信息列表(附源码)

    最后,提供的源码应该包括了上述的SQL查询、递归构建树形结构的代码,以及SpringBoot应用的配置和路由设置。通过这种方式,开发者可以快速理解和复用这个功能。 总之,通过SpringBoot与MyBatis Plus的结合,我们...

    java递归树型结构通用数据库

    Java递归树型结构通用数据库是指使用Java语言实现的递归树型结构数据库系统,该系统可以实现树型结构的部门管理,包括部门的添加、删除、修改和查询等操作。 知识点: 1. 递归树型结构数据库设计 在Java递归树型...

    本实例实现了用树形控件显示磁盘目录,通过双击树形控件的节点可以查看该节点下的子目录

    本实例重点展示了如何利用树形控件来显示计算机的磁盘目录结构,并允许用户通过双击节点来查看其下级目录。这个功能在文件管理器、应用程序设置界面等许多场景中都非常常见,它提供了直观且易于操作的方式来探索复杂...

    javascript 树形目录 大家可以看看学习··

    解析JSON数据并构造树形结构可以使用递归函数: ```javascript function buildTree(data) { let tree = new TreeNode(data.value); data.children.forEach(childData =&gt; { tree.addNode(buildTree(childData)); ...

    struts2动态树形目录

    在本项目中,"struts2动态树形目录"实现了这一功能,用户可以通过界面动态地创建、编辑和删除目录。 首先,让我们深入了解一下Struts2框架。Struts2基于拦截器模式,提供了丰富的插件和拦截器,支持多种视图技术如...

    c#实现如何树形管理权限

    3. 使用递归或迭代方法构建树形结构,这可以通过添加子节点到父节点的集合来完成。 4. 如果需要修改权限树,比如添加、删除或移动节点,相应地更新数据库中的数据。 5. 保存更改到数据库,确保权限信息的正确性。 ...

    JS实现树形结构.rar

    1. 使用DOM操作:通过创建和修改HTML元素,可以将树形结构可视化展示在网页上。 2. 第三方库:如D3.js,可以帮助轻松绘制复杂的可视化图表,包括树状图。 七、树形结构的应用 - 文件系统:模拟目录和文件的层次结构...

    android 树形目录

    在Android开发中,树形目录(Tree-like Directory)是一种常见的数据结构,用于组织和展示文件系统中的文件和目录。在Android应用中,特别是在文件管理器或者涉及到文件操作的场景,理解如何构建和操作树形目录至关...

    java 生成树形文件目录

    在Java编程中,生成树形文件目录是一项常见的任务,它涉及到文件系统操作和数据结构...通过这种方式,你可以用Java程序构建出一个功能完善的树形文件目录,无论是在命令行还是图形界面,都能清晰地展示文件系统的结构。

    用树形控件管理文件夹源码

    "用树形控件管理文件夹源码"的主题聚焦于如何利用树形控件这一UI元素来展示和管理计算机上的文件系统结构。树形控件是一种常见的图形用户界面组件,它以层级结构显示数据,非常适合用来表示文件夹和文件的层次关系。...

    无限级联树形目录

    综上所述,"无限级联树形目录"项目结合了前端的jQuery和zTree插件,后端的S2SH框架以及MySQL数据库,实现了动态展示和操作无限级别的目录结构。通过这个系统,用户可以方便地浏览、管理和更新复杂层次的数据。

    树形菜单的实现,有增删改查方法的实现。

    在IT行业中,树形菜单是一种常见的用户界面元素,尤其在数据层级结构复杂的应用程序中,如文件管理系统、组织架构展示或导航菜单等。本项目主要实现了基于Java的树形菜单,并集成了完整的增删改查功能,使得开发者...

Global site tag (gtag.js) - Google Analytics