[英]Exhaustive Nested Directory Search in Java
我正在编写一个递归程序,它将路径作为输入。 然后,无论文件和文件夹的深度如何,它都将彻底搜索其下的所有文件和文件夹。
我已经写了下面的java程序:
void RecursiveFileSearch(File f, String d) {
int i;
String s[] = f.list();
for (i = 0; i < s.length; i++) {
File fs = new File(d + "/" + s[i]);
if (fs.isDirectory()) {
System.out.println("#DIRECTORY :"+s[i]);
d += "/" + s[i];
RecursiveFileSearch(fs, d);
} else {
System.out.println("@FILE : "+s[i]);
}
}
}
该函数是从外部调用的,例如:
String sourceDirectoryPath = "D:";
File sourceFile = new File(sourceDirectoryPath);
RecursiveFileSearch(sourceFile,sourceDirectoryPath);
但是问题在于,仅搜索源目录下的文件和文件夹。 它没有深入。
我想念什么吗?
您为什么不只使用JDK为您提供的API?
使用Java 8,它很简单:
try (
final Stream<Path> stream = Files.walk(baseDir);
) {
stream.forEach(path -> System.out.printf("%s: %s\n",
(Files.isDirectory(path) ? "DIRECTORY": "FILE"), path));
}
问题在于,每次对方法进行递归调用时,都会将String
变量d
更改,每次将目录名追加到前一个目录中。 您可以通过定义一个新的String
变量来解决此问题,而不是重复使用相同的变量:
void RecursiveFileSearch(File f, String d) {
int i;
String s[] = f.list();
for (i = 0; i < s.length; i++) {
File fs = new File(d + "/" + s[i]);
if (fs.isDirectory()) {
System.out.println("#DIRECTORY :"+s[i]);
String d2 = d + "/" + s[i];
RecursiveFileSearch(fs, d2);
} else {
System.out.println("@FILE : "+s[i]);
}
}
}
我不知道为什么你要用Strings来解决问题。 使用“ getAbsoluteFile”将路径作为字符串排列,因为将其打印到控制台并且仅在编程逻辑中对文件对象起作用。 这将使您的代码更加干净。
void RecursiveFileSearch(File f) {
File[] list = f.listFiles();
for (File elem : list) {
if (elem.isDirectory()) {
System.out.println("#DIRECTORY:"+elem.getAbsoluteFile());
RecursiveFileSearch(x);
} else {
System.out.println("@FILE : "+elem.getAbsoluteFile());
}
}
}
编辑:如果我删除了现在无用的声明。
这应该工作:
void RecursiveFileSearch(File f, String d) {
int i;
String s[] = f.list();
for (i = 0; i < s.length; i++) {
File fs = new File(d + "/" + s[i]);
if (fs.isDirectory()) {
System.out.println("#DIRECTORY :"+s[i]);
RecursiveFileSearch(fs, d + "/" + s[i]);
} else {
System.out.println("@FILE : "+s[i]);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.