我想检查Path(在Java 7中引入)是否以某个扩展名结尾.我试过这样的endsWith()
方法:
Path path = Paths.get("foo/bar.java")
if (path.endsWith(".java")){
//Do stuff
}
Run Code Online (Sandbox Code Playgroud)
但是,这似乎不起作用,因为path.endsWith(".java")
返回false.endsWith()
如果在最终目录分隔符(例如bar.java
)之后的所有内容完全匹配,则该方法似乎仅返回true ,这对我来说不实用.
那么我该如何检查Path的文件扩展名呢?
fan*_*fan 71
Java NIO的PathMatcher提供了FileSystem.getPathMatcher(String syntaxAndPattern):
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*.java");
Path filename = ...;
if (matcher.matches(filename)) {
System.out.println(filename);
}
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅" 查找文件"教程
Mis*_*ble 61
该Path
班没有"延伸"的概念,可能是因为文件系统本身不拥有它.这就是为什么你需要检查它的String
表示,看它是否以四个 五个字符串结束.java
.请注意,endsWith
如果要覆盖混合大小写,则需要不同于简单的比较,例如:".JAVA"
和".Java"
:
path.toString().toLowerCase().endsWith(".java");
Run Code Online (Sandbox Code Playgroud)
Per*_*122 13
简单方案:
if( path.toString().endsWith(".java") ) //Do something
Run Code Online (Sandbox Code Playgroud)
使用Path.endsWith方法时必须小心.如上所述,只有当它与Path对象的子元素匹配时,该方法才会返回true.例如:
Path p = Paths.get("C:/Users/Public/Mycode/HelloWorld.java");
System.out.println(p.endsWith(".java")); // false
System.out.println(p.endsWith("HelloWorld.java")); // true
Run Code Online (Sandbox Code Playgroud)