| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Поддержка групповых операций |
| Автор: lazycat 31.1.2008, 08:38 |
| Доброго времени суток всем! Простите за чайный вопрос, но попал в тупик. Задача: есть имя файла с символами замещения (например, file*.txt). Как получить список всех файлов, удовлетворяющих шаблону? Конечно, можно было бы воспользоваться File.list() а потом сделать грамматический разбор, но наверное должен быть более простой способ? Заранее благодарен всем откликнувшимся |
| Автор: Ulysses4j 31.1.2008, 09:32 | ||
Именно Fil.list()! Только с правильным аргументом (FilenameFilter):
|
| Автор: LSD 31.1.2008, 11:41 |
| Ulysses4j, у тебя неправильная регулярка. |
| Автор: Ulysses4j 31.1.2008, 12:23 |
| Поясните, пожалуйста, в чем: эта регулярка вывела файлы "file1.txt fileFun.txt". Добавлено через 4 минуты и 28 секунд И не вывела "fileWoh" Добавлено через 5 минут и 26 секунд А более тонкую подводку человек уже должен сам делать, исходя из того, что ему нужно: в конце концов, вопрос заключался не в этом. |
| Автор: Kangaroo 31.1.2008, 12:31 | ||
Может надо было вторую точку сделать точкой, а не любым символом?
|
| Автор: lazycat 31.1.2008, 15:38 |
| Большое спасибо, Ulysses4j! Правда, это несколько не то, что я ожидал. Я искал "нечто", чему бы передал шаблон, а оно мне в ответ Enumeration с именами файлов, соответствующих шаблону. В С подобное есть и я удивлялся, почему бы ему не быть в Java. Решение, которое Вы прислали, хорошее, но при этом надо просматривать переданную строку, заменять в ней * на .*, ? на . , потом предварять каждый "ненормальный" символ обратным слэшем, одним словом код разрастается. Увы, наши желания часто расходятся с действительностью Еще раз спасибо! |
| Автор: Kangaroo 31.1.2008, 16:03 | ||
Какую строку? Зачем заменять? Ulysses4j использовал шаблон, возвращаются файлы, которые соответствуют этому шаблону.. |
| Автор: lazycat 31.1.2008, 16:43 |
| Так пользователь же не знает языка регулярных выражений. Единственное, что для него доступно - это символы замещения ? и * в именах файлов. А сделать из того, что получу шаблон - это моя задача. |
| Автор: Kangaroo 31.1.2008, 16:53 | ||||
хе, теперь понятно.
Ну тут уж мы не виноваты, что пользователь шаблоны для С знает, а для Java не выучил.. |
| Автор: lazycat 31.1.2008, 17:12 | ||
Странное утверждение. Есть шаблоны для работы с файловой системой (по сути они включают только два символа: * и ?. Их знает и применяет пользователь. Есть шаблоны регулярных выражений, те, которые используем мы. В C есть функции, которые позволяют получить набор файлов, соответствующих тому шаблону, который ЗАДАЛ ПОЛЬЗОВАТЕЛЬ. При этом нет необходимости использовать регулярные выражения. (Да по большому счету, до появления LEX и YACC в C они и не поддерживались.) В Java подобных классов и методов нет (или я их пока не нашел). Вот и все. И не надо требовать от пользователя знания регулярных выражений. |
| Автор: Kangaroo 31.1.2008, 17:37 |
Смайлы для твого и существует, чтобы передавать эмоции. Это была шутка, не принимайте близко к сердцу. И вообще - это оффтоп. Пора заканчивать. |
| Автор: lazycat 31.1.2008, 19:30 | ||
Это точно. Спасибо всем за участие |
| Автор: alex_nevolin 8.2.2008, 11:50 | ||
| Подниму вопрос, но в новом ракурсе: Есть шаблон для поиска файлов "*/popups/*" - найти все файлы в подпапках popups Сделал regexp ".*/popups/.*" имплементировал фильтр:
Проблема в том что getCanonicalPath() is system-dependent. т.е. получаю разные слэши для Windows и Unix like систем. Для windows приходится делать regexp ".*\\\\popups\\\\.*" Как с этим боротся? Решения System.getProperty("os.name") прошу не предлагать. Может надо сам шаблон подстроить по обе оси? Может можно как-то работать с "file path" sytem independent? |
| Автор: Kangaroo 8.2.2008, 11:57 | ||
alex_nevolin, попробуйте использовать File.separator:
|
| Автор: alex_nevolin 8.2.2008, 12:24 | ||||
| Kangaroo да думал я о File.Separator, только разница есть. Windows:
Unix:
|
| Автор: LSD 8.2.2008, 12:31 |
| Остановитесь, http://commons.apache.org/io/api-release/org/apache/commons/io/filefilter/WildcardFileFilter.html уже давно изобретен |
| Автор: alex_nevolin 8.2.2008, 14:06 |
| LSD: Бью челом!!! |
| Автор: Kangaroo 8.2.2008, 14:09 |
| LSD, что же ты в начале темы молчал А я по-простому - плюса поставлю в репу. |
| Автор: LSD 8.2.2008, 14:52 |
Да я сам про него забыл, тока вспомнил |