Есть две вещи, которые нужно изменить:
Чтобы " найти (первый) файл с указанным глобусом String ", вам нужно закончить обход дерева, если вы столкнулись с файлом, таким образом, еслисовпадение дано.И вам нужно сохранить соответствующий путь как результат.Результат Files.walkFileTree
сам по себе является «начальным файлом» ( JavaDoc ).Это Path
, указывающее на location
.
public static String match(String glob, String location) throws IOException {
StringBuilder result = new StringBuilder();
PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher(glob);
Files.walkFileTree(Paths.get(location), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) throws IOException {
if (pathMatcher.matches(path)) {
result.append(path.toString());
return FileVisitResult.TERMINATE;
}
return FileVisitResult.CONTINUE;
}
});
return result.toString();
}
Если совпадений нет, результирующий String
пуст.
РЕДАКТИРОВАТЬ:
Использование Files.walk
мы можем реализовать поиск с меньшим количеством кода, все еще используя сопоставление на основе выражений глобуса:
public static Optional<Path> match(String glob, String location) throws IOException {
PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher(glob);
return Files.walk(Paths.get(location)).filter(pathMatcher::matches).findFirst();
}
Результат Optional
показывает, что совпадений может не быть.