How to search for a subdirectory from a parent directory? [closed]

ε祈祈猫儿з 提交于 2019-12-20 04:12:20

问题


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());
        }

    }

}

I m able to list all the sub directories from the parent directory. But I would like to search for particular sub directory in java.Is there any way?

directory:C:\projects\workspace\testing

how to list only subdirectories (z1) and not files? (Sub directory z1 is present in various sub directories)

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

The Output should be directories containing z1


回答1:


Use Files.walkFileTree, it will recursively show your sub-directory corresponding to your parent directory.

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:


You can do a simple recursive function with File.listFiles() method

  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;
  }

Assuming you want to find all z1 directory inside C:\projects\workspace\testing then:

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


来源:https://stackoverflow.com/questions/20438328/how-to-search-for-a-subdirectory-from-a-parent-directory

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!