首页 / JAVA / Java非递归文件系统走路
Java非递归文件系统走路
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java非递归文件系统走路,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1696字,纯文字阅读大概需要3分钟。
内容图文
![Java非递归文件系统走路](/upload/InfoBanner/zyjiaocheng/721/b3582f825c9644b4ab958c6941c26d41.jpg)
我需要创建一个使用非递归遍历文件系统的应用程序,并打印出一定深度的文件.
是)我有的:
public void putFileToQueue() throws IOException, InterruptedException {
File root = new File(rootPath).getAbsoluteFile();
checkFile(root, depth);
Queue<DepthControl> queue = new ArrayDeque<DepthControl>();
DepthControl e = new DepthControl(0, root);
do {
root = e.getFileName();
if (root.isDirectory()) {
File[] files = root.listFiles();
if (files != null)
for (File file : files) {
if (e.getDepth() + 1 <= depth && file.isDirectory()) {
queue.offer(new DepthControl(e.getDepth() + 1,file));
}
if (file.getName().contains(mask)) {
if (e.getDepth() == depth) {
System.out.println(Thread.currentThread().getName()
+ " putting in queue: "
+ file.getAbsolutePath());
}
}
}
}
e = queue.poll();
} while (e != null);
}
和助手班
public class DepthControl {
private int depth;
private File file;
public DepthControl(int depth, File file) {
this.depth = depth;
this.file = file;
}
public File getFileName() {
return file;
}
public int getDepth() {
return depth;
}
}
我收到了答案,由于广度优先搜索(希望正确翻译),该程序使用额外的内存.我有O(k ^ n),其中k – 子目录的平均数量,n – 深度.这个程序可以用O(k * n)轻松完成.请帮我修改算法.
解决方法:
我认为这应该做的工作,并且有点简单.它只是跟踪下一级别的文件,扩展它们,然后重复该过程.算法本身跟踪深度,因此不需要额外的类.
// start in home directory.
File root = new File(System.getProperty("user.dir"));
List<File> expand = new LinkedList<File>();
expand.add(root);
for (int depth = 0; depth < 10; depth++) {
File[] expandCopy = expand.toArray(new File[expand.size()]);
expand.clear();
for (File file : expandCopy) {
System.out.println(depth + " " + file);
if (file.isDirectory()) {
expand.addAll(Arrays.asList(file.listFiles()));
}
}
}
内容总结
以上是互联网集市为您收集整理的Java非递归文件系统走路全部内容,希望文章能够帮你解决Java非递归文件系统走路所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。