遍历特定文件夹的目录

时间:2011-05-05 01:28:00

标签: java io

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"))`

请让我知道如何改进我的代码。任何事情都会受到赞赏。 感谢

3 个答案:

答案 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”目录和所有子目录中的内容,那么您需要将算法分成两部分

  1. 找到“src”文件夹,然后找到
  2. 使用您当前的算法从那里打印所有目录中的所有内容并降低

答案 2 :(得分:0)

不是在名称上检查.equals(),而是使用fileObject.getName()。contains(StringBuffer)或fileObject.getName()来检查名称是否包含“src”.indexOf(“src”)!= -1