Проблема с глобусом в Java 7
Как бы я ни хотел, я не могу по-настоящему понять, как бороться с glob в Java. ниже короткой программы:
public class Test{
public static void main(String args[]) throws IOException{
Path p1 = Paths.get("C:\\Users\\all\\Test\\cool.jpg");
Path p2 = Paths.get("cool.jpg");
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:**/*.jpg")
System.out.println(matcher.matches(p1));
System.out.println(matcher.matches(p2));
}
}
Результат ИСТИНА / ЛОЖЬ
Запуск с "glob: *.jpg" приводит к значению FALSE / TRUE
Таким образом, похоже, что в первый раз при поиске за пределами папки находился проект (файл java), а во второй раз в папке находился файл java.
Если я изменю второй путь на любое другое местоположение (кроме того, где находится мой проект java), результат будет: для glob:**/*. Jpg -> TRUE/TRUE и для glob: *.jpg -> FALSE/FALSE.
Так что мой вопрос: я хорошо понял, что с помощью glob:*.??? это поиск в папке, где находится проект Java и использует glob:**/*.??? поиск по определенному пути, отличному от папки, в которой находится проект Java. Потому что в документации написано:
Шаблон glob указывается в виде строки и сопоставляется с другими строками, такими как имена каталогов или файлов. Синтаксис Glob следует нескольким простым правилам: Звездочка * соответствует любому количеству символов (включая ни одного). Две звездочки, **, работают как *, но пересекают границы каталога. Этот синтаксис обычно используется для сопоставления полных путей.
Но нигде не упоминается, что границы каталога относятся к каталогу, в котором расположен Java-проект.
1 ответ
Измените шаблон глобуса на это:
"glob:**.jpg"
Ваш шаблон соответствует только путям к файлам, содержащим хотя бы один каталог.
Например, следующий шаблон соответствует только путям, по крайней мере, с двумя каталогами (ex path: a/b/image.jpg)
"glob:**/**/*.jpg"
И просто к вашему сведению он не ищет файлы, он только проверяет, соответствует ли данный путь шаблону.