我有一个目录列表,我正在网页的selectMenu中使用。
该列表包含某个目录下的所有子目录,使用以下java代码检索..
File directory = new File("C:\\myHomeDirectory");
myDirectories = directory.listFiles((FileFilter) DirectoryFileFilter.DIRECTORY);
我想过滤myDirectories列表以排除不包含某个文件的子目录(比如称为testFolder)。换句话说,我希望myDirectories只包含一个名为testForder的子文件夹。怎么做?
答案 0 :(得分:3)
我想,你必须实现自己的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
的一部分我没有机会测试此示例代码是否现在编译,但我希望它可以帮助您获得解决方案。
答案 1 :(得分:0)
我发现所有带有子目录的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();
...
}