Je voudrais vérifier si un Path (introduit dans Java 7) se termine par une certaine extension. J'ai essayé la méthode endsWith()
comme ça :
Path path = Paths.get("foo/bar.Java")
if (path.endsWith(".Java")){
//Do stuff
}
Cependant, cela ne semble pas fonctionner, car path.endsWith(".Java")
renvoie false. Il semble que la méthode endsWith()
ne renvoie true que s'il existe une correspondance complète pour tout ce qui suit le séparateur de répertoires final (par exemple, bar.Java
), Ce qui n'est pas pratique pour moi.
Alors, comment puis-je vérifier l'extension de fichier d'un chemin?
Les NIO Java PathMatcher fournit FileSystem.getPathMatcher (String syntaxAndPattern) :
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*.Java");
Path filename = ...;
if (matcher.matches(filename)) {
System.out.println(filename);
}
Voir le Recherche de fichiers tutoriel pour plus de détails.
La classe Path
n'a pas de notion "d'extension", probablement parce que le système de fichiers ne l'a pas elle-même. C’est pourquoi vous devez vérifier sa représentation String
et voir si elle se termine par le quatre cinq chaîne de caractères .Java
. Notez que vous avez besoin d’une comparaison différente de la simple endsWith
si vous voulez couvrir une casse mixte, telle que ".Java"
et ".Java"
:
path.toString().toLowerCase().endsWith(".Java");
Solution simple:
if( path.toString().endsWith(".Java") ) //Do something
Vous devez être prudent lorsque vous utilisez la méthode Path.endsWith. Comme vous l'avez dit, la méthode retournera true seulement si elle correspond à un sous-élément de votre objet Path. Par exemple:
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
Il n'y a aucun moyen de faire cela directement sur l'objet Path lui-même.
Je peux voir deux options: