2009-07-07 15 views

risposta

7

sembra che la sottoclasse dovrebbe fornire un metodo pubblico che chiama passeggiata().

+0

argh !!! ovviamente, come mi è mancato @ # $ @ # $ @ # visto? –

+1

Non ti odio quando succede>. < – Nippysaurus

+0

in realtà sembra che non si dispone di fornire un metodo che chiama passeggiata. un'altra classe può chiamare walk() dall'esterno. –

11

Giusto per espandere su questa risposta in quanto ero perplesso in un primo momento di come utilizzare la classe come bene e questa domanda è venuta su google quando mi guardavo intorno. Questo è solo un esempio di come l'ho usato (meno alcune cose):

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

E poi si sarebbe solo invocare tramite il metodo pubblico si è creato, passando tutti gli argomenti che si può desiderare:

List<File> files = new FindConfigFilesDirectoryWalker().getFiles(); 
+0

Nota che getResource() richiede che la cartella delle risorse si trovi nel percorso di generazione. È ulteriormente descritto qui: http://lj4newbies.blogspot.com/2008/03/using-classgetresource-load-resource.html – dbasch

1

Tutto quello che volevo era una raccolta di directory da iterazioni. Questa sottoclasse ha fornito ciò di cui avevo bisogno:

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