Ich möchte überprüfen, ob ein Pfad (eingeführt in Java 7) mit einer bestimmten Erweiterung endet. Ich habe die endsWith()
Methode so ausprobiert :
Path path = Paths.get("foo/bar.java")
if (path.endsWith(".java")){
//Do stuff
}
Dies scheint jedoch nicht zu funktionieren, da path.endsWith(".java")
false zurückgegeben wird. Es scheint, dass die endsWith()
Methode nur dann true zurückgibt, wenn nach dem endgültigen Verzeichnis-Trennzeichen (z. B. bar.java
) für alles eine vollständige Übereinstimmung vorliegt , was für mich nicht praktikabel ist.
Wie kann ich die Dateierweiterung eines Pfads überprüfen?
String
, nicht von aPath
(obwohl es funktionieren würdePath.toString()
, aber ich hatte auf einen Weg gehofft, der das nicht erfordert).Antworten:
Der PathMatcher von Java NIO bietet FileSystem.getPathMatcher (String syntaxAndPattern) :
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*.java"); Path filename = ...; if (matcher.matches(filename)) { System.out.println(filename); }
Siehe die Informationen finden Sie im Lernprogramm zum Suchen von Dateien .
quelle
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*.java");
glob:*.java
,filename
sollte es keinen übergeordneten Pfad enthalten. Wenn ich einen rel / abs-Pfad wie verwendeglob:c:/users/muchwow/*.java
, funktioniert dies (beachten Sie, dass \\\\ mit Backslashes verwendet werden muss). Das Musterglob:**.java
sucht nur nach allem, was * .java enthält, unabhängig vom übergeordneten Pfad.Die
Path
Klasse hat keinen Begriff von "Erweiterung", wahrscheinlich weil das Dateisystem selbst ihn nicht hat. Aus diesem Grund müssen Sie dieString
Darstellung überprüfen und feststellen, ob sie mit denvierfünf Zeichen endet.java
. Beachten Sie, dass Sie einen anderen Vergleich als einfach benötigen,endsWith
wenn Sie gemischte Fälle wie".JAVA"
und abdecken möchten".Java"
:path.toString().toLowerCase().endsWith(".java");
quelle
Einfache Lösung:
if( path.toString().endsWith(".java") ) //Do something
Bei der Verwendung der Path.endsWith-Methode müssen Sie vorsichtig sein. Wie Sie angegeben haben, gibt die Methode nur dann true zurück , wenn sie mit einem Unterelement Ihres Path-Objekts übereinstimmt. Zum Beispiel:
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
quelle
Es gibt keine Möglichkeit, dies direkt auf dem Path-Objekt selbst zu tun.
Ich kann zwei Optionen sehen:
quelle