kullanarak apache commons io DirectoryWalker'u nasıl kullanacağımı anlamaya çalışıyorum. DirectoryWalker'ın alt sınıfının nasıl anlaşılacağını anlamak oldukça kolaydır. Ama bunu belirli bir dizinde yürütmeye nasıl başlıyorsunuz?DirectoryWalker
cevap
Alt sınıfın, walk() işlevini destekleyen bir genel yöntem sağlaması gerektiği anlaşılıyor.
Bu cevabı genişletmek için, ilk önce sınıfın nasıl kullanılacağı konusunda şaşkınlık duydum ve bu konu etrafa baktığımda google'da ortaya çıktı.
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;
}
}
Sonra sadece istediğiniz herhangi argümanlar geçen, oluşturduğunuz kamu yöntemi ile çağırmak istiyorum: Ben böyle (eksi bazı şeyler) eskiden nasıl sadece bir örnektir
List<File> files = new FindConfigFilesDirectoryWalker().getFiles();
NotResource() yönteminin, kaynak yolunun yapım yolunda olmasını gerektirdiğini unutmayın. Burada ayrıca anlatılmaktadır: http://lj4newbies.blogspot.com/2008/03/using-classgetresource-load-resource.html – dbasch
Tek istediğim, yinelemek için bir dizin koleksiyonuydu. Bu alt sınıf, ihtiyacım olanı sağladı:
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 !!! Tabii ki, # # $ @ # $ @ # nasıl görmeyi özledim? –
bu durumdan nefret etmiyor musunuz>. < – Nippysaurus
Aslında, yürümek için bir yöntem sağlamanız gerekmez. Başka bir sınıf dışarıdan walk() öğesini çağırabilir. –