無論出於何種原因,我似乎無法獲得全局語法路徑匹配器來匹配任何文件。全局語法不適用於Windows PathMatcher
我已經簡化我的代碼到下面的方法:
public static void match() throws IOException {
String startingLocation = "C:\\";
PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher("glob:*");
Files.walkFileTree(Paths.get(startingLocation), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path path,
BasicFileAttributes attrs) throws IOException {
if (pathMatcher.matches(path)) {
System.out.println(path);
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc)
throws IOException {
return FileVisitResult.CONTINUE;
}
});
}
我的理解是,該方法應該列出所有的文件我的C盤上。但是,它不打印出單個文件。有趣的是,如果我用「正則表達式:。」而不是「glob:」運行同樣的東西,它似乎列出了我C驅動器上的所有文件。
我可以通過將glob表達式轉換爲正則表達式的努力,但我真的不想。
有沒有人有任何想法可能會出錯?
請注意,我在Windows 7機器上使用Java 8
從[文檔](https://docs.oracle.com/javase/7/docs/api/java/nio/file/FileSystem.html#getPathMatcher%28java.lang.String%29)它似乎就好像你的glob表達式應該類似於'「glob:C:\\ **」'。 –
它也不適用於「glob:C:\\\ **」。 – NateW
你試過'「glob:C:\\\\ **」'? javadoc聲明:*「請注意反斜槓被轉義;作爲Java語言中的字符串字面值,該模式將與該註釋相關」C:\\\\\ *「'」* –