我需要使用 java 遍历随机文件系统(Windows)。
问题:它需要自下而上,因为我将数据合并在一起,并且根应该包含我的所有数据集。
这就是我到目前为止所拥有的:
private void listDir(File dir) {
File[] files = dir.listFiles();
if (files != null) {
for (int i = 0; i < files.length; i++) {
System.out.print(files[i].getAbsolutePath());
if (files[i].isDirectory()) {
System.out.print(" (Directory)\n");
listDir(files[i]); //Recursion
}
else {
System.out.print(" (File)\n");
}
}
}
}
那么有什么想法可以实现这一点吗?
感谢您的帮助,希望我的问题不会打扰您^^
最佳答案
一般来说,通过深度优先树递归,您可以通过更改输出语句和递归调用的顺序来影响输出的顺序。
拿这棵树:
1
/ \
2 3
/ \ \
4 5 6
如果我的代码说(这个答案中的所有代码都是伪代码):
void f(Node node) {
if(node == null) return;
print node.value;
f(node.left);
f(node.right);
}
...然后它将输出 1 2 4 5 3 6
- 按照您头脑中的逻辑并验证这是真的。
如果我只改变语句的顺序:
void f(Node node) {
if(node == null) return;
f(node.left);
print node.value;
f(node.right);
}
现在它打印 4 2 5 1 3 6
- 再次遵循逻辑并验证它是否正确。
void f(Node node) {
if(node == null) return;
f(node.left);
f(node.right);
print node.value;
}
... 打印 4 5 2 6 3 1
——这可能就是你想要的。
您可能想要广度优先遍历,并且您可能希望反转输出的顺序 - Google 中有示例。
在文件系统中,有更多的子级,而不仅仅是左右,所以它更像是:
void recursiveList(File f) { // f could be a file or a directory
if(f is a file) {
output file info about f
return
}
// else it's a directory
for(File entry : f.getChildren()) {
recursiveList(entry);
}
output directory info about f
}
关于java - 使用java递归深度优先遍历文件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22538198/