【问题标题】:How to get all subdirectories excluding some subdirectories?如何获取不包括某些子目录的所有子目录?
【发布时间】:2014-01-07 21:49:43
【问题描述】:

我有一个在网页的选择菜单中使用的目录列表。

该列表包含某个目录下的所有子目录,使用以下 java 代码检索..

File directory = new File("C:\\myHomeDirectory");
myDirectories = directory.listFiles((FileFilter) DirectoryFileFilter.DIRECTORY);

我想过滤 myDirectories 列表以排除不包含特定文件(例如称为 testFolder)的子目录。换句话说,我希望 myDirectories 仅包含具有名为 testForder 的子文件夹的文件。该怎么做?

【问题讨论】:

    标签: java fileutils apache-commons-io filefilter


    【解决方案1】:

    我猜,你必须实现自己的 FileFilter。

    类似这样的:

     class CustomDirectoryFilter implements FileFilter {
    
    private String allowedFileName = "testFolder";
    
      @Override
      public boolean accept(File pathname) {
    
        if (pathname.isDirectory()) {
          File[] subFiles = pathName.listFiles();
          for (File file : subFiles){
            if (file.getName().equals(allowedFileName)){
               return true;
            }
          }
        }
        return false; 
      }
    }
    

    说明: 对于 C:\myHomeDirectory 中的每个文件,测试给定文件是否为目录。如果是,请获取其中所有文件的数组并测试这些文件是否包含您的文件。如果找到此类文件,则允许该目录成为 myDirectories

    的一部分

    我没有机会测试此示例代码现在是否可以编译,但我希望它可以帮助您获得解决方案。

    【讨论】:

    • 非常感谢。真的很有帮助。
    • 很高兴能帮上忙。
    【解决方案2】:

    我发现所有带有子目录的 FileNameFilter 有点复杂。 我现在用这个:

    FileUtils.iterateFiles(rootdir, filefilter, dirfilter);
    
      <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.3.2</version>
            <type>jar</type>
       </dependency>
    
    import org.apache.commons.io.FileUtils;
    import org.apache.commons.io.filefilter.TrueFileFilter;
    import org.apache.commons.io.filefilter.WildcardFileFilter;
    import java.util.Iterator;
    
       File inputDir = new File(inputPath.toString());
       Iterator<File> matchesIterator = FileUtils.iterateFiles(
                inputDir, new WildcardFileFilter("somefilenamefilter*.xml"), TrueFileFilter.TRUE);
       while (matchesIterator.hasNext()) {
           File someFile = matchesIterator .next();
           ...
       } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-09
      • 2016-01-17
      • 1970-01-01
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 2017-03-25
      相关资源
      最近更新 更多