如何检查Java 7路径的扩展

如何检查Java 7路径的扩展,java,path,java-7,Java,Path,Java 7,我想检查a(在Java7中引入)是否以某个扩展结尾。我尝试了endsWith()方法,如下所示: Path path = Paths.get("foo/bar.java") if (path.endsWith(".java")){ //Do stuff } 但是,这似乎不起作用,因为path.endsWith(“.java”)返回false。似乎endsWith()方法只有在最终的目录分隔符(例如bar.java)之后的所有内容都完全匹配时才会返回true,这对我来说并不实用 那么如何

我想检查a(在Java7中引入)是否以某个扩展结尾。我尝试了
endsWith()
方法,如下所示:

Path path = Paths.get("foo/bar.java")
if (path.endsWith(".java")){
    //Do stuff
}
但是,这似乎不起作用,因为
path.endsWith(“.java”)
返回false。似乎
endsWith()
方法只有在最终的目录分隔符(例如
bar.java
)之后的所有内容都完全匹配时才会返回true,这对我来说并不实用


那么如何检查路径的文件扩展名呢?

无法直接在路径对象本身上执行此操作

我可以看到两种选择:

  • 将路径转换为文件,并对File.getName()返回的字符串调用endsWith
  • 调用路径上的toString,并调用该字符串上的endsWith

  • 类没有“扩展名”的概念,可能是因为文件系统本身没有扩展名。这就是为什么您需要检查它的
    字符串
    表示,并查看它是否以四个五字符的字符串
    .java
    结尾。请注意,如果要涵盖混合情况,例如
    “.JAVA”
    “.JAVA”
    ”,则需要与简单的
    endsWith
    不同的比较:

    Java NIO提供:

    有关详细信息,请参阅教程。

    简单解决方案:

    if( path.toString().endsWith(".java") ) //Do something
    
    在使用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
    

    @assylias,这个问题是为了从
    字符串
    ,而不是
    路径
    (虽然它可以与
    Path.toString()
    一起工作,但我希望找到一种不需要的方法)。文件扩展名的概念依赖于操作系统,所以我认为在文件或路径中不支持它。@assylias:,那太糟糕了。文件扩展名的概念定义良好,在Windows/Linux/MacOs/Android中多次使用。尽管它们在Linux中的重要性可能不如在Windows中重要,但它们仍然在桌面和服务器应用程序中大量使用如果您正在查看不同的目录,您需要为我使用“glob:*.java”,Lagrandmile的评论就是这样做的。如果@Dave Jarvis可以将他的建议合并到选定的答案中,我想这将有助于NIO-API的初学者。在Windoze下:如果我确实想使用
    glob:.java
    ,则
    filename
    不应包含任何父路径。如果我使用像
    glob:c:/users/muchwow/*.java
    这样的rel/abs路径,它会工作(注意\\\\必须与反斜杠一起使用)。模式
    glob:*.java
    只搜索其中包含*.java的所有内容,而不考虑父路径。与只检查文件名(字符串)是否以后缀结尾相比,在这个问题上使用路径匹配器是一个相当昂贵的难题。这不是一个好的解决方案,因为可能存在空指针。如上所述,最好使用一些库(例如apacheio-utils)或路径匹配器。
    if( path.toString().endsWith(".java") ) //Do something
    
    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