用于搜索文件夹树并查找特定文件类型的递归方法

时间:2012-09-29 21:18:59

标签: java recursion directory subdirectory

所以我正在编写一个代码来查找蛋白质数据库中的某些信息。我知道递归文件夹搜索是找到这些文件的最佳方式,但我对这种语言很新,并且被告知用Java编写(我通常做C ++)

这就是说,我会用什么方法:

首先:找到桌面上的文件夹
第二步:打开每个文件夹和该文件夹子文件夹
第三步:找到以“.dat”类型结尾的文件(因为这些是存储蛋白质信息的唯一文件

感谢您提供的任何和所有帮助

4 个答案:

答案 0 :(得分:14)

  1. java.io.File“文件和目录路径名的抽象表示”
  2. File.listFiles提供目录中包含的所有文件的列表(如果File对象代表目录)
  3. File.listFiles(FileFilter)为您提供了根据您的需求过滤文件列表的功能
  4. 所以,有了这些信息......

    您可以使用类似......

    的路径指定路径位置
    File parent = new File("C:/path/to/where/you/want");
    

    您可以检查File是否是...目录

    if (parent.isDirectory()) {
        // Take action of the directory
    }
    

    您可以按...列出目录的内容。

    File[] children = parent.listFiles();
    // This will return null if the path does not exist it is not a directory...
    

    您可以用类似的方式过滤列表...

    File[] children = parent.listFiles(new FileFilter() {
            public boolean accept(File file) {
                return file.isDirectory() || file.getName().toLowerCase().endsWith(".dat");
            }
        });
    // This will return all the files that are directories or whose file name ends
    // with ".dat" (*.dat)
    

    其他有用的方法包括(但不限于)

答案 1 :(得分:8)

这样的事情可以解决问题:

public static void searchForDatFiles(File root, List<File> datOnly) {
    if(root == null || datOnly == null) return; //just for safety   
    if(root.isDirectory()) {
        for(File file : root.listFiles()) {
            searchForDatFiles(file, datOnly);
        }
    } else if(root.isFile() && root.getName().endsWith(".dat")) {
        datOnly.add(root);
    }
}

此方法返回后,传递给它的List<File>将填充目录的.dat文件和所有子目录(如果我没有记错的话)。

答案 2 :(得分:2)

您应该查看Java File API。特别是你应该查看listFiles method并编写FileFilter来选择目录,当然还有你感兴趣的文件。

一种方法,它将返回符合您条件的所有文件(假设您实现FileFilter)是这样的:

List<File> searchForFile(File rootDirectory, FileFilter filter){
    List<File> results = new ArrayList<File>();
    for(File currentItem : rootDirectory.listFiles(filter){
      if(currentItem.isDirectory()){
          results.addAll(searchForFile(currentItem), filter)
      }
      else{
          results.add(currentItem);
      }
    }
    return results;
}

答案 3 :(得分:1)

使用递归foldr搜索并使用函数endsWith()来查找.bat文件,然后您可以使用任何String函数来查找您的需求信息。