Давайте:Почему glob: * соответствует любому пути в PathMatcher?
Path path = Paths.get("C:\\1.txt");
Следующий код печатает "истина":
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("regex:.*");
System.out.println(matcher.matches(path));
, но следующий код печатает "ложные":
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*");
System.out.println(matcher.matches(path));
Почему?
Я ожидал иметь true
в обоих подходах.
Согласно Glob page from Wikipedia, шаблон *
означает:
соответствует любому количеству любых символов не включая ни один
Детали:
- Java 8
- для Windows 7
Вместо того, чтобы смотреть на Википедию, что означает этот глобус, я настоятельно рекомендую [смотреть документацию для 'getPathMatcher'] (https://docs.oracle.com/javase/7/docs/api/ Java/NiO/файл/FileSystem.html # getPathMatcher (java.lang.String)). Но он говорит что-то похожее: * «Символ \ * соответствует нулю или нескольким символам компонента имени без пересечения границ каталога». * Также обратите внимание: * «Символы \ * \ * соответствуют нулевому или нескольким символам, пересекающим границы директорий». * Возможно, вы хотите '**' (не знаете, никогда не использовали 'PathMatcher'). –
Кроме того, из связанного вами Wikipage: 'COMMAND.COM и cmd.exe имеют большинство распространенного синтаксиса с некоторыми ограничениями: Нет [...], а * может появляться только в конце шаблона, а не в начало. ' –
@JorgeCampos:' cmd.exe' на моей системе Windows 8 отлично с '*' в начале шаблона. –