Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 全局语法不适用于Windows PathMatcher_Java_Glob - Fatal编程技术网

Java 全局语法不适用于Windows PathMatcher

Java 全局语法不适用于Windows PathMatcher,java,glob,Java,Glob,无论出于何种原因,我似乎无法获得全局语法路径匹配器来匹配任何文件 我已将代码简化为以下方法: public static void match() throws IOException { String startingLocation = "C:\\"; PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher("glob:*"); Files.walkFileTre

无论出于何种原因,我似乎无法获得全局语法路径匹配器来匹配任何文件

我已将代码简化为以下方法:

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;
            }
        });
    }
public static void match()引发IOException{
字符串开始位置=“C:\\”;
PathMatcher PathMatcher=FileSystems.getDefault().getPathMatcher(“glob:”);
Files.walkFileTree(path.get(startingLocation),新的SimpleFileVisitor(){
@凌驾
public FileVisitResult visitFile(路径路径,
BasicFileAttributes(属性属性)引发IOException{
if(pathMatcher.matches(路径)){
System.out.println(路径);
}
返回FileVisitResult.CONTINUE;
}
@凌驾
公共文件VisitResult visitFileFailed(路径文件,IOException exc)
抛出IOException{
返回FileVisitResult.CONTINUE;
}
});
}
我的理解是,该方法应该列出我的C驱动器上的所有文件。但是,它不会打印出单个文件

有趣的是,如果我用“regex:”而不是“glob:”运行相同的东西,它似乎列出了我的C驱动器上的所有文件

我可以努力将glob表达式转换成正则表达式,但我真的不愿意

有人知道会出什么问题吗

请注意,我是在使用Java 8的Windows 7计算机上运行的,请务必仔细阅读

如果要打印出
C:
驱动器的所有文件, 将模式更改为
glob:*
glob:C:\\\\***
(如javadoc中所述)

还请注意
文件。walkFileTree
只匹配文件。

请务必仔细阅读本手册

如果要打印出
C:
驱动器的所有文件, 将模式更改为
glob:*
glob:C:\\\\***
(如javadoc中所述)


另外请注意,
文件。walkFileTree
只匹配文件。

从它看来,您的glob表达式应该类似于
“glob:C:\\\**”
。它也不能与“glob:C:\\**”一起使用。您是否尝试过
“glob:C:\\\\\**”
?javadoc声明:“请注意,反斜杠是转义的;作为Java语言中的字符串文本,模式将是
“C:\\\*”
“^关于该注释,您可以参考吗?从它看来,您的glob表达式应该类似于
“glob:C:\\**”
。它也不适用于“glob:C:\\**”。您尝试过
“glob:C:\\\**”
?javadoc声明:“注意反斜杠是转义的;作为Java语言中的字符串文本,模式应该是
“C:\\\*”
“^关于这个注释,你能参考一下吗?我想它应该是
glob:C:\\\\\***
。是的,我也是。(刚刚测试过)。
glob:*
确实有效,并在C驱动器下打印了文件。谢谢@JonnyHenly,你说得对(也是在javadoc中编写的)只是为了让它更清楚一点(一开始我不理解):在glob中作为路径分隔符的反斜杠总是需要转义的。如果从字符串文本构造glob,这会导致一个路径分隔符有4个斜杠。我想它需要是
glob:C:\\\***
。是的,我也是。(刚刚测试过)。
glob:*
确实有效,并在C驱动器下打印了文件。谢谢@JonnyHenly,你是对的(也是用javadoc编写的),只是为了让它更清楚一点(我一开始不明白):始终需要转义全局框中作为路径分隔符的反斜杠。如果从字符串文本构造全局框,则一个路径分隔符将有4个斜杠。