如何检查Java 7path的扩展

我想检查一个Path (在Java 7中引入)是否以特定扩展名结尾。 我尝试了像这样的endsWith()方法:

 Path path = Paths.get("foo/bar.java") if (path.endsWith(".java")){ //Do stuff } 

但是,这似乎不工作,因为path.endsWith(".java")返回false。 看来endsWith()方法只会在最后一个目录分隔符(例如bar.java )之后有一个完全匹配的情况下返回true,这对我来说是不实用的。

那么如何检查Path的文件扩展名?

Java NIO的PathMatcher提供了FileSystem.getPathMatcher(String syntaxAndPattern) :

 PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*.java"); Path filename = ...; if (matcher.matches(filename)) { System.out.println(filename); } 

有关详细信息,请参阅查找文件教程。

Path类没有“扩展”的概念,可能是因为文件系统本身没有它。 这就是为什么你需要检查它的String表示,看看它是否以四个 五个string.java结尾。 请注意,如果要覆盖混合大小写,例如".JAVA"".Java" ,则需要与简单endsWith进行比较。

 path.toString().toLowerCase().endsWith(".java"); 

直接在Path对象本身上没有办法做到这一点。

有两个选项我可以看到:

  1. 将path转换为文件并调用由File.getName()返回的String上的endsWith
  2. 在path上调用toString并在该String上调用endsWith。