Groovy шаблон или регулярное выражение для поиска пути к файлу - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь найти один путь к файлу среди множества возможных путей, существующих в некотором "basedir".

Запрашиваемый путь к файлу имеет следующие характеристики:

  1. путь находится под известным «basedir», например, под
    "C: \ somedir \ basedir \"
  2. путь всегда содержит одно известное имя подкаталога, например, "SUBDIRNAMEWEKNOW"
  3. имя файла также известно, например, "filename. xml"

Итак искомый путь к файлу может быть, например:

C:\somedir\basedir\SUBDIRNAMEWEKNOW\someotherdir\filename.xml
C:\somedir\basedir\someotherdir\SUBDIRNAMEWEKNOW\someotherdir\filename.xml

или любой другой комбинацией любых подкаталогов под известным «basedir».

Наилучший уровень моих знаний Groovy сосредоточен в этот фрагмент кода:

def file_paths = new FileNameFinder().getFileNames(basedir, '**/filename.xml')

Вывод этого кода выглядит следующим образом:

C:\somedir\basedir\Test-Folder\filename.xml,
C:\somedir\basedir\Test-Folder\someotherdir\someotherdir\filename.xml, 
C:\somedir\basedir\someotherdir\SUBDIRNAMEWEKNOW\filename.xml
C:\somedir\basedir\someotherdir\filename.xml

И только один путь является правильным. Тот с C: \ somedir \ basedir \ someotherdir \ SUBDIRNAMEWEKNOW \ filename. xml

Альтернативный код с регулярным выражением будет выглядеть так:

def file_paths = FileNameByRegexFinder().getFileNames(basedir, /.filename.xml/)

У вас есть идея? как я могу использовать шаблон или регулярное выражение для достижения этого?

1 Ответ

0 голосов
/ 09 января 2020

FileNameFinder.getFileNames ожидает ANT-шаблон в качестве второго аргумента. В вашем случае наиболее релевантным является заполнитель **, который соответствует нулю или нескольким каталогам. Шаблон будет:

def file_paths = new FileNameFinder().getFileNames(basedir, '**/SUBDIRNAMEWEKNOW/**/filename.xml')
...