Java遍历所有目录并查找文件

时间:2012-10-16 08:26:54

标签: java recursion

我必须搜索可以在任何目录或驱动器中的文件。它应该与任何操作系统兼容。当我用Google搜索时,大多数代码遍历特定目录但不是完整文件系统。有没有办法有效地做到这一点?任何帮助或建议都将非常感激。

我从http://www.mkyong.com/java/how-to-traverse-a-directory-structure-in-java/得到的代码,但我们必须传递一些目录作为参数。有没有办法概括以获得所有位置?

public static void main (String args[]) {

    displayIt(new File("C:\\"));
}

public static void displayIt(File node){

    System.out.println(node.getAbsoluteFile());

    if(node.isDirectory()){
        String[] subNote = node.list();
        for(String filename : subNote){
            displayIt(new File(node, filename));
        }
}

3 个答案:

答案 0 :(得分:3)

Apache Commons-IO是这种操作的一个很好的API。对于Unix系统,你可以只使用root“/”,但这对windows不起作用,因此你必须要求所有的根并迭代它们:

File[] roots = File.listRoots();

Collection<File> files = new ArrayList<File>();    

for(File root : roots) {
    files.addAll(FileUtils.listFiles(
      root, 
      new RegexFileFilter(<your regex filter>), 
      DirectoryFileFilter.DIRECTORY
    ));
} 

答案 1 :(得分:1)

此类代码段将列出目录和子目录中的所有文件。您不必将任何文件添加到allFiles,您可以在那里进行检查。因为你还没有提供任何代码(所以我假设你没有尝试过任何东西)我会让你更新它;)

private void addFiles(File file, Collection<File> allFiles) {
    File[] files = file.listFiles();
    if (files != null) {
       for (File f : files) {
           allFiles.add(f);
           addFiles(f, allFiles);
       }
    }
}

答案 2 :(得分:0)

如果你想通过递归来实现这一点,这里是DFS的代码,代码可能无法正常工作(我从不测试它),它没有优化,但它可能会给你一些如何解决问题的想法

File find(String directoryName, String pattern)
{
 File currentDirectory = loadFile(directoryName);

for (String name: currentDirectory .list())
{
File children = loadFile(name)

if (children.isDirectory())
{
 File file = find(name, pattern)
 if (file !=null)
 {
  return file;
 }
}
else
{
 if (match(name,pattern)
  {
   return children;
  }
}
}
return null;

}