2009-07-07 26 views

Trả lời

7

Dường như lớp con phải cung cấp phương thức công khai gọi là walk().

+0

argh !!! tất nhiên, làm thế nào @ # $ @ # $ @ # tôi đã bỏ lỡ nhìn thấy điều đó? –

+1

bạn không ghét nó khi điều đó xảy ra>. < – Nippysaurus

+0

thực sự có vẻ như bạn không phải cung cấp phương thức gọi đi bộ. một lớp khác có thể gọi walk() từ bên ngoài. –

11

Chỉ cần mở rộng câu trả lời này vì tôi đã bối rối trước tiên về cách sử dụng lớp học và câu hỏi này xuất hiện trên google khi tôi đang tìm kiếm. Đây chỉ là một ví dụ về cách tôi đã sử dụng nó (trừ một số điều):

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

Và sau đó bạn sẽ chỉ gọi nó bằng phương pháp nào mà bạn đã tạo, đi qua trong bất kỳ đối số mà bạn có thể muốn:

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

Lưu ý rằng getResource() yêu cầu thư mục tài nguyên nằm trong đường dẫn xây dựng. Nó được mô tả thêm ở đây: http://lj4newbies.blogspot.com/2008/03/using-classgetresource-load-resource.html – dbasch

1

Tất cả những gì tôi muốn là tập hợp các thư mục để lặp lại. Phân lớp này cung cấp những gì tôi cần:

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; 
    } 
} 
Các vấn đề liên quan