Я пытаюсь понять, как использовать apache commons io DirectoryWalker. Довольно легко понять, как подкласс DirectoryWalker. Но как вы начнете выполнять его в определенном каталоге?using DirectoryWalker
ответ
Похоже, что подкласс должен предоставлять общедоступный метод, который вызывает walk().
Просто для того, чтобы расширить этот ответ, так как сначала я был озадачен тем, как использовать этот класс, и этот вопрос возник на google, когда я оглядывался. Это просто пример того, как я использовал его (минус некоторые вещи):
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();
Обратите внимание, что для getResource() требуется, чтобы папка ресурса находилась в пути сборки. Далее описано: http://lj4newbies.blogspot.com/2008/03/using-classgetresource-load-resource.html – dbasch
Все, что я хотел, это набор каталогов для повторения. Этот подкласс предоставил то, что мне было нужно:
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;
}
}
argh !!! конечно, как @ # $ @ # $ @ # я пропустил, увидев это? –
не ненавидите, когда это происходит. < – Nippysaurus
На самом деле, похоже, вам не нужно предоставлять метод, который вызывает прогулку. другой класс может вызвать walk() извне. –