问题
我需要编写一个简单的软件,该软件具有一定的约束条件,并将一系列文件添加到列表中。
用户可以在目录的两种“类型”之间进行选择:一种带有*通配符,这意味着它也应该浏览子目录,而经典的一种不带通配符,而只是使该目录中存在文件。

我在做什么

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

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的接口(interface)。

最佳答案



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

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

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

关于java - 在不使用递归的情况下遍历目录?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3932382/

10-16 23:27