enter code here
我编写了以下代码,以递归方式搜索文件夹目录以查找特定文件夹。
该程序应该检查文件夹名称,如果文件夹名称是“src”,那么它应该进入该文件夹以获取所有文件。目前该程序正在从所有目录中获取所有文件。
public class Main {
public static void main(String[] args) {
File fileObject = new File("C:\\Users\\lizzie\\Documents\\");
recursiveTraversal(fileObject);
}
public static void recursiveTraversal(File fileObject)
{
if (fileObject.isDirectory())
{
File allFiles[] = fileObject.listFiles();
for(File aFile : allFiles){
recursiveTraversal(aFile);
}
}
else if (fileObject.isFile())
{
System.out.println(fileObject.getAbsolutePath());
}
}
}
当我检查某个文件夹是否是目录时,我添加了以下约束,但这没有帮助。
if (fileObject.isDirectory() && fileObject.getName().equals("src"))`
请让我知道如何改进我的代码。任何事情都会受到赞赏。 感谢
答案 0 :(得分:2)
如果你在recursiveTraversal
内查看你的if-else,你会看到你正在打印任何不是目录的东西,无论它在哪里。这是一个修复:
public class Main {
public static void main(String[] args) {
File fileObject = new File("C:\\Users\\lizzie\\Documents\\");
recursiveSearch(fileObject);
}
public static void recursiveSearch(File fileObject) {
if (fileObject.isDirectory()) {
if (fileObject.getName().equals("src")) {
recursivePrint(fileObject);
} else {
File allFiles[] = fileObject.listFiles();
for(File aFile : allFiles){
recursiveSearch(aFile);
}
}
}
// ignore non-directory objects during search
}
public static void recursivePrint(File fileObject)
{
if (fileObject.isDirectory())
{
File allFiles[] = fileObject.listFiles();
for(File aFile : allFiles){
recursivePrint(aFile);
}
}
else if (fileObject.isFile())
{
System.out.println(fileObject.getAbsolutePath());
}
}
}
这将以名为src
的任何目录递归打印所有文件。
答案 1 :(得分:1)
您需要做的是将约束放在正在打印的内容上,而不是正在遍历的内容上。正如您所注意到的,遍历工作正常,因为它获取所有子文件夹中的所有文件。
如果您只想打印“src”目录(不在子目录)中的文件名,那么您可以...
...
else if (fileObject.isFile() && fileObject.getParent().getName().equals("src")
{
System.out.println(fileObject.getAbsolutePath());
}
...
如果要打印“src”目录和所有子目录中的内容,那么您需要将算法分成两部分
答案 2 :(得分:0)
不是在名称上检查.equals(),而是使用fileObject.getName()。contains(StringBuffer)或fileObject.getName()来检查名称是否包含“src”.indexOf(“src”)!= -1