Закрыть ... [X]

Шаблоны маски имён файлов

Назад Вперед

В примере показан способ организации просмотра содержимого каталогов с помощью методов класса File. По сравнению с предыдущим примером мы добавили возможность просмотра с использованием фильтра - маски имени файла. Указав маску специального вида, можно просмотреть список каталогов, расположенных в заданном каталоге (без включения в него имен имеющихся там файлов).

Исходный текст примера

Архив проекта для Java WorkShop 2.0

Немного теории

Как мы уже говорили в предыдущем примере, класс File позволяет организовать просмотр каталогов. Для этого нужно воспользоваться определенными в этом классе методами list:

public String[] list(); public String[] list( FilenameFilter filter);

Сейчас нас интересует вторая реализация этого метода, которая позволяет получить список только тех объектов, что удовлетворяют условиям, определенным в фильтре filter класса FilenameFilter.

Для использования фильтра вы маски должны создать класс, реализующий интерфейс FilenameFilter. В рамках этого интерфейса необходимо определить метод accept:

class MaskFilter implements FilenameFilter { MaskFilter(String sMask) {... } public boolean accept(File f, String name) {... } }

Этот метод будет вызываться для каждого объекта. Ему передается ссылка на объект класса File, соответствующая каталогу, для которого выполняется просмотр, и строка имени файла.

Метод может проанализировать переданную ему информацию и вернуть одно из двух значений - true или false. Если метод вернет значение true, объект попадет в список, если false - нет.

Описание примера

Наш пример похож на предыдущий, однако в отличие от него позволяет дополнительно к полному пути задавать маску.

Если маска задается как "" или если не задается совсем, в список включаются все файлы:

Enter full path ('quit' to exit): d:\ Enter mask: -dir- Backup -dir- cdtest -dir- Library -dir- Logos -dir- Multimedia Files -dir- NTRESKIT pagefile.sys -dir- Program Files -dir- RECYCLER SQL.LOG -dir- TEMP WD1 -dir- WINNT -dir- zakadmin -dir- ZAKAppDist Enter full path ('quit' to exit):

В том случае когда маска задана как "dir", список будет состоять только из имен каталогов:

Enter full path ('quit' to exit): d:\ Enter mask: dir -dir- Backup -dir- cdtest -dir- Library -dir- Logos -dir- Multimedia Files -dir- NTRESKIT -dir- Program Files -dir- RECYCLER -dir- TEMP -dir- WINNT -dir- zakadmin -dir- ZAKAppDist Enter full path ('quit' to exit):

И, наконец, если указать любую другую строку в качестве шаблона, в списке появятся только такие файлы и каталоги, имена которых заканчиваются строкой шаблона. Например:

Enter full path ('quit' to exit): c:\ Enter mask: SYS MSDOS.SYS CONFIG.SYS IO.SYS Enter full path ('quit' to exit):

Рассмотрим исходный текст приложения.

Отображение списка содержимого каталогов выполняется в цикле. Сразу после запуска цикла наша программа запрашивает у пользователя путь к каталогу и строку шаблона:

String s; String sMask; int i; while(true) { System.out.println( "Enter full path ('quit' to exit): "); s = new String(getKbdString()); if(s.equals("quit")) break; System.out.print("\nEnter mask: "); sMask = new String(getKbdString());... }

Путь к каталогу сохраняется в переменной s, а строка шаблона - в переменной sMask. Если пользователь ввел в качестве пути строку "quit", программа завершает свою работу.

Далее мы создаем объект f класса File для пути, введенного пользователем, и проверяем, существует ли соответствующий объект:

File f = new File(s); if(!f.exists()) { System.out.println("\nNot found: " + s); continue; }

Кроме того, мы проверяем, что указанный объект действительно является каталогом, а не файлом:

if(!f.isDirectory()) { System.out.println( "\nNot directory: " + s); continue; }

В том случае когда пользователь указал существующий каталог, наша программа заполняет массив строк sDirList списком шаблоны маски имён файлов имеющихся там объектов:

String[] sDirList = f.list(new MaskFilter(sMask));

При этом методу list передается ссылка на вновь созданный объект класса MaskFilter, являющийся фильтром имен каталогов и файлов. Класс MaskFilter мы рассмотрим чуть позже.

Заполненный массив отображается на консоли в виде строк аналогично тому, как это сделано в предыдущем приложении:

for(i = 0; i < sDirList.length; i++) { File f1 = new File( s + File.separator + sDirList[i]); if(f1.isFile()) System.out.println(sDirList[i]); else System.out.println( "-dir- " + sDirList[i]); }

Теперь о том, как устроен класс MaskFilter. Его исходный текст приведен ниже полностью:

class MaskFilter implements FilenameFilter { String mask; MaskFilter(String sMask) { mask = sMask; } public boolean accept(File f, String name) { if(mask.equals("")) return true; else if(mask.equals("dir")) return(new File(f, name).isDirectory()); else return(name.endsWith(mask)); } }

Класс MaskFilter имеет конструктор и реализует интерфейс FilenameFilter, в рамках которого определен единственный метод accept.

Конструктор получает в качестве параметра строку шаблона и сохраняет ее в поле mask.

Метод accept анализирует шаблон mask и имя файла name.

Если шаблон указан как "", метод accept возвращает значение true. В результате в список файлов попадут имена любых файлов и каталогов.

В том случае когда шаблон имеет вид "dir", метод accept возвращает значение true только в том случае, если анализируемый объект является каталогом. Для проверки этого факта метод accept создает объект класса File и вызывает для него метод isDirectory.

Прочие шаблоны обрабатываются при помощи метода endsWith. Если имя файла оканчивается символами, заданными в шаблоне, метод accept возвращает значение true. Это же значение возвращается и при пустой строке шаблона.

Назад Вперед


Источник: http://www.frolov-lib.ru/programming/javasamples/vol7/vol7_21/index.html


Поделись с друзьями



Рекомендуем посмотреть ещё:



3.1. ФАЙЛОВАЯ СИСТЕМА. - Основы информатики Какой подарок можно сделать на хэллоуин

Шаблоны маски имён файлов 7.21. Просмотр каталога с фильтром
Шаблоны маски имён файлов Шаблон поиска Википедия
Шаблоны маски имён файлов Маска имен файлов - nnCron
Шаблоны маски имён файлов Метод tFiles (String, String)
Шаблоны маски имён файлов Задача 4
Шаблоны маски имён файлов UAZ Patriot с ураганным спецмотором Журнал «4х4 Club»
Автомобильные ароматизаторы. Любимому автомобилю Беседка во дворе частного дома своими руками Делаем валик для прикатки шумоизоляции бортжурнал Лада 2112 DOLBIT Имитация бруса в интерьере фото Как сделать из бумаги розу 7 вариантов роз Как сделать шумоизоляцию автомобиля своими руками легко Монтаж мансардной крыши: устройство конструкции ПОДЕЛКИ ИЗ БУМАГИ Записи в рубрике ПОДЕЛКИ ИЗ БУМАГИ Правка велосипедных колес » Самоделки своими руками - сделай сам

ШОКИРУЮЩИЕ НОВОСТИ