Рекурсивный перебор файлов в Java

Недавно на Мтааламу был топик о том, что рекурсивный перебор файлов в языке Groovy осуществляется одной строкой. Но иногда эту задачу требуется выполнить на чистой Java. Вот один из нехитрых способов:



  Stack <File> stack = new Stack <File> ();
  String[] sa = new File(rootDir).list(
   new FilenameFilter(){public boolean accept(File d, String n){return new File(d, n).isDirectory();}}		  
  );
  for(String s : sa)stack.push(new File(rootDir, s));
  while(!stack.isEmpty()){
   for(String s : stack.pop().list()){
    File f = new File(dir, s);
    if(f.isDirectory())stack.push(f);
    else if(s.endsWith(".xsl"))System.out.println("Found " + f.getAbsolutePath()); 
   }	   
  }


Здесь rootDir — каталог, для которого выполняется рекурсия. Все имеющиеся в нем каталоги заносятся в стек. Затем начинается процесс выталкивания каталогов из стека и анализ их содержимого (в данном случае идет поиск файлов с расширением ".xsl"). Обратно в стек каталоги уже не возвращаются, зато в него заносятся их дочерние каталоги. Процесс идет до тех пор, пока стек не опустеет.

ЗЫ. В коде есть ошибка. Было бы неплохо, если бы кто-нибудь ее заметил.
  • +7
  • 24 июня 2010, 12:54
  • yababay

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.