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