2009-07-07 5 views
8

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

7

Alt sınıfın, walk() işlevini destekleyen bir genel yöntem sağlaması gerektiği anlaşılıyor.

+0

argh !!! Tabii ki, # # $ @ # $ @ # nasıl görmeyi özledim? –

+1

bu durumdan nefret etmiyor musunuz>. < – Nippysaurus

+0

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. –

11

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(); 
+0

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

1

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; 
    } 
}