2009-07-07 15 views
8

Estoy tratando de averiguar cómo usar apache commons io DirectoryWalker. Es bastante fácil de entender cómo subclase DirectoryWalker. Pero, ¿cómo empiezas a ejecutarlo en un directorio en particular?usando DirectoryWalker

Respuesta

7

Parece que la subclase debería proporcionar un método público que llame a walk().

+0

argh !!! por supuesto, ¿cómo echo de menos ver @ # $ @ # $ @ #? –

+1

no lo odias cuando sucede>. < – Nippysaurus

+0

en realidad parece que no tienes que proporcionar un método que llame a pie. otra clase puede llamar a walk() desde el exterior. –

11

Solo para ampliar esta respuesta ya que al principio me desconcertaba cómo usar la clase y esta pregunta surgió en google cuando estaba mirando a mi alrededor. Esto es sólo un ejemplo de cómo he usado (menos algunas cosas):

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

Y entonces usted acaba de invocar ella a través del método público que ha creado, pasando los argumentos que usted puede desear:

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

Tenga en cuenta que getResource() requiere que la carpeta de recursos esté en la ruta de compilación. Se describe con más detalle aquí: http://lj4newbies.blogspot.com/2008/03/using-classgetresource-load-resource.html – dbasch

1

Todo lo que quería era una colección de directorios para iterar. Esta subclase proporcionaba lo que necesitaba:

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