【问题标题】:How to search for a subdirectory from a parent directory? [closed]如何从父目录中搜索子目录? [关闭]
【发布时间】:2013-12-07 06:14:07
【问题描述】:
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;

public class DirectoryContents
{

    public static void main(String[] args) throws IOException 
    {

        File f = new File("."); 
        FileFilter directoryFilter = new FileFilter()
        {
            public boolean accept(File file)
            {
            return file.isDirectory();
            }
        };

        File[] files = f.listFiles(directoryFilter);
        for (File file : files) 
        {
            if (file.isDirectory()) 
            {
                System.out.print("directory:");
            } 
            else
            {
                System.out.print("     file:");
            }
            System.out.println(file.getCanonicalPath());
        }

    }

}

我可以列出父目录中的所有子目录。 但是我想在java中搜索特定的子目录。有什么办法吗?

directory:C:\projects\workspace\testing

如何只列出子目录 (z1) 而不是文件? (子目录z1存在于各个子目录中)

directory:C:\projects\workspace\testing\z1
directory:C:\projects\workspace\testing\f5\z1
directory:C:\projects\workspace\testing\f5\a\g\h\d

输出应该是包含z1的目录

【问题讨论】:

    标签: java directory wildcard


    【解决方案1】:

    使用Files.walkFileTree,它会递归显示你的父目录对应的子目录。

    public static void main(String[] args) throws IOException {
        Path startingDir = Paths
                .get("C:\\projects\\workspace\testing");
        Files.walkFileTree(startingDir, new FindJavaVisitor());
    }
    
    private static class FindJavaVisitor extends SimpleFileVisitor<Path> {
         @Override
        public FileVisitResult preVisitDirectory(Path dir, 
                              BasicFileAttributes attrs) throws IOException {
        if(dir.getFileName().toAbsolutePath().toString().contains("z1")){
            System.out.println("z1 is found at"+ dir.getFileName().toAbsolutePath());
        }
          return FileVisitResult.CONTINUE;
        }
    }
    

    【讨论】:

      【解决方案2】:

      你可以用File.listFiles()方法做一个简单的递归函数

        public Collection<File> findDir(File dir, String name) {
          ArrayList<File> result = new ArrayList<File>();
          if(!dir.isDirectory()) return result;
          for(File child : dir.listFiles()) {
            if(child.getName().equals(name)) result.add(child);
            result.addAll(findDir(child, name));
          }
          return result;
        }
      

      假设您想在C:\projects\workspace\testing 中找到所有z1 目录,那么:

      Collection<File> result = findDir(new File("C:/projects/workspace/testing"), "z1");
      

      【讨论】:

        猜你喜欢
        • 2015-03-22
        • 1970-01-01
        • 2013-12-24
        • 2022-01-24
        • 2016-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-03
        相关资源
        最近更新 更多