I have been trying to use the new globbing feature in JDK7, starting from the documentation and examples
I can get globs such as \"glob:*.dat\"
to work
You need to start your glob with **
matcher = FileSystems.getDefault().getPathMatcher("glob:**/foo/**/bar/*.dat");
Otherwise, calling
matcher.matches(file)
attempts to match the full path to the file against a regular expression that starts with the relative path (/foo/), rather than with the absolute path (d:/petermr-workspace/.../foo).
Prepending the ** to the glob just tells it to ignore the beginning of the absolute path.
Here's a working example which displays all the zip files in any descendant directory of d:/
:
public static void main(String[] args) throws IOException {
final PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:d:/**/*.zip");
Files.walkFileTree(Paths.get("d:/"), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
if (matcher.matches(file)) {
System.out.println(file);
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}
});
}
As you see, using forward slashes works on Windows.