8

我想弄清楚如何使用 Apache Commons IO DirectoryWalker。很容易理解如何子类化DirectoryWalker.

但是如何开始在特定目录上执行它呢?

4

3 回答 3

11

只是为了扩展这个答案,因为我一开始也对如何使用这个类感到困惑,当我环顾四周时,这个问题出现在谷歌上。这只是我如何使用它的一个例子(减去一些东西):

public class FindConfigFilesDirectoryWalker extends DirectoryWalker {
    private static String rootFolder = "/xml_files";
    private Logger log = Logger.getLogger(getClass());

    private static IOFileFilter filter = FileFilterUtils.andFileFilter(FileFilterUtils.fileFileFilter(),
            FileFilterUtils.suffixFileFilter("xml"));

    public FeedFileDirectoryWalker() {
        super(filter, -1);
    }

    @SuppressWarnings("unchecked")
    @Override
    protected void handleFile(final File file, final int depth, final Collection results) throws IOException {
        log.debug("Found file: " + file.getAbsolutePath());
        results.add(file);
    }

    public List<File> getFiles() {
        List<File> files = new ArrayList<File>();

        URL url = getClass().getResource(rootFolder);

        if (url == null) {
            log.warn("Unable to find root folder of configuration files!");
            return files;
        }

        File directory = new File(url.getFile());

        try {
            walk(directory, files);
        }
        catch (IOException e) {
            log.error("Problem finding configuration files!", e);
        }

        return files;
    }
}

然后您只需通过您创建的公共方法调用它,并传入您可能需要的任何参数:

List<File> files = new FindConfigFilesDirectoryWalker().getFiles();
于 2009-08-18T15:23:37.313 回答
7

看起来子类应该提供一个调用 walk() 的公共方法。

于 2009-07-07T00:49:55.413 回答
1

我想要的只是要迭代的目录集合。这个子类提供了我需要的东西:

public class UDirWalker extends DirectoryWalker {
    public UDirWalker() {
        super();
    }

    public ArrayList<File> getDirectories(File startDirectory) throws IOException {
        ArrayList<File> dirs = new ArrayList<File>();
        walk(startDirectory, dirs);
        return dirs;
    }

    @Override
    protected boolean handleDirectory(File directory, int depth,
        Collection results) {
        results.add(directory);
        return true;
    }
}
于 2011-08-18T20:17:57.270 回答