当前位置: 首页 > 面试题库 >

何时在JAVA的glob语法中使用**(双星)

马博学
2023-03-14
问题内容

直接从这个
Java的甲骨文教程:

两个星号*的作用类似于,但跨越目录边界。此语法通常用于匹配完整路径。

有人可以从中做一个真实的例子吗?“跨目录边界”是什么意思?跨越目录边界,我想像是从根目录检查文件getNameCount()-1。再来一个真实的例子解释在*的区别
做法 将是巨大的。


问题答案:

的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

的例子*VS
**。假设您当前的工作目录为/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();
});

如果使用**,它将匹配该目录中的所有文件夹和文件。



 类似资料:
  • 问题内容: 取自Angular文档: 角表达式 角表达式是类似JavaScript的代码段,主要放置在插值绑定中,例如 但也可直接用于指令属性,例如。 例如,以下是Angular中的有效表达式: 1 + 2 a + b user.name项目[索引] 但是,对于何时使用双括号语法以及何时不使用双括号语法,我有些困惑。该文档似乎建议您在指令属性中使用表达式时不需要它们(请参见上面的ng- click

  • 问题内容: 从Java 7开始,钻石语法在方法参数中并不总是有效,例如,为什么钻石运算符不适用于Java7中的java.util.Collections方法?。该问题的答案提到Java 8中的目标类型推断可解决该问题。 是否还有其他情况无法使用菱形语法? 问题答案: Diamond运算符不能总是在Java 8中使用。最初的改善Java 8推理的计划(JEP 101 )有两个目标: 在方法上下文中添

  • 问题内容: 我想知道何时在类中使用get和set方法(getName,setName),何时使用简单方法代替 这是使用set和get方法的类的示例 谢谢 问题答案: 使用Getters / Setters与使用Fields 根据经验: 使用直接来自同一类的变量(实际上来自同一.java文件,因此内部类也可以),使用其他类的Getters / Setters。

  • 问题内容: 乔什·布洛赫(Josh Bloch)提到在双重检查惯用语中使用局部变量来提高性能(EJ,第二版,第284页),并说示例代码在其机器上的运行速度比不具有局部变量的机器快25%。所以问题是,为什么速度更快?对于局部变量版本,它将访问实例变量3次,在正常情况下,它将访问实例变量4次。这是“ 25%”增长背后的原因还是其他原因? 编辑:3或4倍访问仅在实例首次创建时。此后,它是1或2次。 ED

  • 问题内容: 好的。我一直在脑海里猛击了大约2个小时,现在想弄清楚为什么世界上告诉我0。或者与此相关的任何其他组合,它只是截断了小数,我只是不知道为什么。 问题答案: 364/365执行整数除法(截断小数点)。 尝试强制其执行浮点除法。 就像是: 由于其中一个操作数不是整数,因此也可以使用。

  • 我想在Protégé中为类表达式语法使用双值,但我找不到任何示例。所有使用的都是整数值,而不是double。例如:http://protegeproject.github.io/protege/class-expression-syntax/ 例如,我想用米来表示一个人的身高: HasHeight值1.89 HasHeight最小值1.70 我怎么能这么做? 当前的工作(根据语法):“hasHei