博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java IO 用递归实现目录删除和树形目录展示 Java实现
阅读量:4975 次
发布时间:2019-06-12

本文共 2405 字,大约阅读时间需要 8 分钟。

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

递归

  所谓递归(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系列视频教程。

转载于:https://www.cnblogs.com/mengdd/archive/2013/02/11/2910139.html

你可能感兴趣的文章
裁剪图片
查看>>
数据结构实习 problem L 由二叉树的中序层序重建二叉树
查看>>
VS中展开和折叠代码
查看>>
如何确定VS编译器版本
查看>>
设置PL/SQL 快捷键
查看>>
个人阅读作业7
查看>>
转载:深入浅出Zookeeper
查看>>
GMA Round 1 新程序
查看>>
node anyproxy ssi简易支持
查看>>
编译预处理指令:文件包含指令、宏定义指令、条件编译指令
查看>>
PHP函数 ------ ctype_alnum
查看>>
网站安全
查看>>
WS-Addressing 初探
查看>>
.NET+模块编排+数据库操作类的封装+分层架构+实体类+Ajax.net+Athem.NET+javascript+Activex组件+用户权限等...
查看>>
Markdown不常见功能
查看>>
(二)NUnit单元测试心得
查看>>
hdu_2604Queuing(快速幂矩阵)
查看>>
frame.bounds和center
查看>>
HDU 1102 Constructing Roads
查看>>
android StaticLayout参数解释
查看>>