使用DirectoryWalker

Jas*_*n S 8 java apache-commons

我试图找出如何使用apache commons io DirectoryWalker.理解如何子类化DirectoryWalker非常容易.但是,如何在特定目录上开始执行它?

rcl*_*rcl 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

List<File> files = new FindConfigFilesDirectoryWalker().getFiles();
Run Code Online (Sandbox Code Playgroud)


Duc*_*uck 7

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