我想收集一个目录下所有文件的列表,特别是包含子目录的文件。我不喜欢自己做事情,所以我使用来自Apache Commons IO的FileUtils.listFiles
。所以我有一些类似的东西:
import java.io.File;
import java.util.Collection;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;
public class TestListFiles {
public static void main(String[] args) {
Collection<File> found = FileUtils.listFiles(new File("foo"),
TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
for (File f : found) {
System.out.println("Found file: " + f);
}
}
}
问题是,这似乎只查找普通文件,而不是目录:
$ mkdir -p foo/bar/baz; touch foo/one_file
$ java -classpath commons-io-1.4.jar:. TestListFiles
Found file: foo/one_file
我已经将TrueFileFilter
传递给了这两个筛选器,所以我想不出比这更全面的方法了。我希望它列出:"foo", "foo/one_file", "foo/bar", "foo/bar/baz"
(以任何顺序)。
我也会接受非FileUtils
解决方案,但必须编写我自己的BFS,甚至从我得到的列表中收集父目录集,这似乎很愚蠢。(这无论如何都会遗漏空的子目录。)这是在Linux上,FWIW。
发布于 2012-10-18 00:21:08
一个老生常谈的答案,但这对我很有效:
FileUtils.listFilesAndDirs(new File(dir), TrueFileFilter.INSTANCE, DirectoryFileFilter.DIRECTORY);
同时显示以下两项:
我使用:
FileUtils.listFilesAndDirs(new File(dir), new NotFileFilter(TrueFileFilter.INSTANCE), DirectoryFileFilter.DIRECTORY)
仅显示目录而不显示文件...
发布于 2011-02-01 18:24:30
你有没有简单地尝试过:
File rootFolder = new File(...);
File[] folders = rootFolder.listFiles((FileFilter) FileFilterUtils.directoryFileFilter());
它似乎对我很有效。当然,您需要使用递归。
希望能有所帮助。
发布于 2009-05-23 04:23:55
在我的大多数重要应用程序中,我都避免使用Java IO库,而是更喜欢Commons VFS。我相信使用适当的参数调用this method将会实现您的目标,但我承认要实现这个功能还有很长的路要走。
具体地说,此代码将执行您想要的操作:
FileObject[] files = fileObject.findFiles(new FileSelector() {
public boolean includeFile(FileSelectInfo fileInfo) {
return fileInfo.getFile().getType() == FileType.FOLDER; }
public boolean traverseDescendents(FileSelectInfo fileInfo) {
return true;
}
});
其中FileObject是fileObject的一个实例。
https://stackoverflow.com/questions/900659
复制相似问题