web-dev-qa-db-fra.com

Comment vérifier l’extension d’un Java 7 chemin

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?

65
Thunderforge

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.

68
fan

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");
61
Miserable Variable

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
12
Pero122

Il n'y a aucun moyen de faire cela directement sur l'objet Path lui-même.

Je peux voir deux options:

  1. Convertissez le chemin en un fichier et appelez endsWith sur la chaîne renvoyée par File.getName ()
  2. Appelez toString sur le chemin et appelez endWith sur cette chaîne.
2
Mark