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的界面. 解决方法
递归既不“愚蠢”,也不一定效率低下.实际上,在这种特殊情况下,递归解决方案可能比非递归解决方案更有效.当然,递归解决方案比替代方案更容易编码和理解. 递归的唯一潜在问题是,如果目录树在病理学上很深,你可能会溢出堆栈. 如果你真的想避免递归,那么自然的方法就是使用“文件列表堆栈”数据结构.您将在每个地方递归,将包含当前目录(剩余)File对象的列表推送到堆栈,读取新目录并开始处理它们.然后,当您完成后,弹出堆栈并继续父目录.这将为您提供深度优先遍历.如果要进行广度优先遍历,请使用“文件队列”数据结构而不是堆栈. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |