Рекурсивный перебор файлов в Java
Недавно на Мтааламу был топик о том, что рекурсивный перебор файлов в языке Groovy осуществляется одной строкой. Но иногда эту задачу требуется выполнить на чистой Java. Вот один из нехитрых способов:
Здесь rootDir — каталог, для которого выполняется рекурсия. Все имеющиеся в нем каталоги заносятся в стек. Затем начинается процесс выталкивания каталогов из стека и анализ их содержимого (в данном случае идет поиск файлов с расширением ".xsl"). Обратно в стек каталоги уже не возвращаются, зато в него заносятся их дочерние каталоги. Процесс идет до тех пор, пока стек не опустеет.
ЗЫ. В коде есть ошибка. Было бы неплохо, если бы кто-нибудь ее заметил.
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"). Обратно в стек каталоги уже не возвращаются, зато в него заносятся их дочерние каталоги. Процесс идет до тех пор, пока стек не опустеет.
ЗЫ. В коде есть ошибка. Было бы неплохо, если бы кто-нибудь ее заметил.
Комментарии (0)
RSS свернуть / развернутьТолько зарегистрированные и авторизованные пользователи могут оставлять комментарии.