Me gustaría comprobar si una ruta (introducida en Java 7) termina con una determinada extensión. Probé el endsWith()
método así:
Path path = Paths.get("foo/bar.java")
if (path.endsWith(".java")){
//Do stuff
}
Sin embargo, esto no parece funcionar porque path.endsWith(".java")
devuelve falso. Parece que el endsWith()
método solo devuelve verdadero si hay una coincidencia completa para todo después del separador de directorio final (por ejemplo bar.java
), lo cual no es práctico para mí.
Entonces, ¿cómo puedo verificar la extensión de archivo de una ruta?
String
, no aPath
(aunque funcionaría conPath.toString()
, pero esperaba una forma que no requiriera eso).Respuestas:
PathMatcher de Java NIO proporciona FileSystem.getPathMatcher (String syntaxAndPattern) :
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*.java"); Path filename = ...; if (matcher.matches(filename)) { System.out.println(filename); }
Consulte el tutorial de búsqueda de archivos para obtener más detalles.
fuente
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*.java");
glob:*.java
, entoncesfilename
no debería contener ninguna ruta principal. Si utilizo una ruta rel / abs comoglob:c:/users/muchwow/*.java
, funciona (tenga en cuenta que \\\\ debe usarse con barras invertidas). El patrónglob:**.java
solo busca todo lo que contenga * .java, independientemente de la ruta principal.La
Path
clase no tiene la noción de "extensión", probablemente porque el propio sistema de archivos no la tiene. Es por eso que debe verificar suString
representación y ver si termina con la cadena decuatrocinco caracteres.java
. Tenga en cuenta que necesita una comparación diferente a la simpleendsWith
si desea cubrir casos mixtos, como".JAVA"
y".Java"
:path.toString().toLowerCase().endsWith(".java");
fuente
Solución simple:
if( path.toString().endsWith(".java") ) //Do something
Debe tener cuidado al usar el método Path.endsWith. Como dijiste, el método devolverá verdadero solo si coincide con un subelemento de tu objeto Path. Por ejemplo:
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
fuente
No hay forma de hacer esto directamente en el propio objeto Path.
Hay dos opciones que puedo ver:
fuente