如何获取不包括某些子目录的所有子目录?
Posted
技术标签:
【中文标题】如何获取不包括某些子目录的所有子目录?【英文标题】: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 的子文件夹的文件。该怎么做?
【问题讨论】:
【参考方案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();
...
【讨论】:
以上是关于如何获取不包括某些子目录的所有子目录?的主要内容,如果未能解决你的问题,请参考以下文章
在 bash 中获取目录的内容,不包括 .git 中的所有内容