Javadoc для FileSystem#getPathMatcher()
имеет некоторые довольно хорошие примеры и объяснения
*.java Matches a path that represents a file name ending in .java
*.* Matches file names containing a dot
*.{java,class} Matches file names ending with .java or .class
foo.? Matches file names starting with foo. and a single character extension
/home/*/* Matches /home/gus/data on UNIX platforms
/home/** Matches /home/gus and /home/gus/data on UNIX platforms
C:\\* Matches C:\foo and C:\bar on the Windows platform (note that the backslash is escaped; as a string literal in the Java Language the pattern would be "C:\\\\*")
Так /home/**
будет соответствовать /home/gus/data
, но /home/*
не будет.
/home/*
говорит каждый файл непосредственно в каталоге /home
.
/home/**
говорит каждый файл в любом каталоге внутри /home
.
Пример *
против **
. Предполагая, что ваш текущий рабочий каталог равен /Users/username/workspace/myproject
, то следующее будет соответствовать только файлу (директории) ./myproject
.
PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher("glob:/Users/username/workspace/*");
Files.walk(Paths.get(".")).forEach((path) -> {
path = path.toAbsolutePath().normalize();
System.out.print("Path: " + path + " ");
if (pathMatcher.matches(path)) {
System.out.print("matched");
}
System.out.println();
});
Если вы используете **
, это будет соответствовать все папки и файлы в этой папке.
Это означает, что он будет рекурсивно проходить через все подкаталоги, где * будет захватывать только файлы из текущего каталога, игнорируя подкаталоги – StormeHawke