加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 不使用递归遍历目录?

发布时间:2020-12-14 19:35:11 所属栏目:Java 来源:网络整理
导读:问题 我需要编写一个简单的软件,给出一定的约束条件,将一系列文件附加到列表中. 用户可以在两个“类型”的目录之间进行选择:一个带有*通配符,意味着它还应该探索子目录,而经典一个没有通配符,只能获取该目录中存在的文件. 我在做什么 现在我正在做最愚蠢的
问题
我需要编写一个简单的软件,给出一定的约束条件,将一系列文件附加到列表中.
用户可以在两个“类型”的目录之间进行选择:一个带有*通配符,意味着它还应该探索子目录,而经典一个没有通配符,只能获取该目录中存在的文件.

我在做什么

现在我正在做最愚蠢的事情:

import java.io.File;

public class Eseguibile {

    private static void displayIt(File node){

        System.out.println(node.getAbsoluteFile());

        if(node.isDirectory()){
            String[] subNote = node.list();
            for(String filename : subNote){
                displayIt(new File(node,filename));
            }
        }
    }

    public static void main(String[] args){
        System.out.println("ciao");

        displayIt( new File("/home/dierre/") );

    }

}

我不需要构建树,因为我只需要文件列表,所以我想也许有一种更有效的方法.

我正在阅读有关TreeModel的内容,但据我了解,它只是实现Jtree的界面.

解决方法

Right now I’m doing the stupidest thing …

递归既不“愚蠢”,也不一定效率低下.实际上,在这种特殊情况下,递归解决方案可能比非递归解决方案更有效.当然,递归解决方案比替代方案更容易编码和理解.

递归的唯一潜在问题是,如果目录树在病理学上很深,你可能会溢出堆栈.

如果你真的想避免递归,那么自然的方法就是使用“文件列表堆栈”数据结构.您将在每个地方递归,将包含当前目录(剩余)File对象的列表推送到堆栈,读取新目录并开始处理它们.然后,当您完成后,弹出堆栈并继续父目录.这将为您提供深度优先遍历.如果要进行广度优先遍历,请使用“文件队列”数据结构而不是堆栈.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读