Я хотел бы проверить, заканчивается ли путь (представленный в Java 7) определенным расширением. Я пробовал endsWith()
метод так:
Path path = Paths.get("foo/bar.java")
if (path.endsWith(".java")){
//Do stuff
}
Однако это не работает, потому что path.endsWith(".java")
возвращает false. Кажется, что endsWith()
метод возвращает true только в том случае, если есть полное совпадение для всего, что находится после последнего разделителя каталогов (например bar.java
), что для меня нецелесообразно.
Итак, как я могу проверить расширение файла пути?
String
, а не отPath
(хотя он работал быPath.toString()
, но я надеялся на способ, который этого не требует).Ответы:
PathMatcher Java NIO предоставляет FileSystem.getPathMatcher (String syntaxAndPattern) :
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*.java"); Path filename = ...; if (matcher.matches(filename)) { System.out.println(filename); }
См. Подробности в руководстве по поиску файлов .
источник
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*.java");
glob:*.java
, тоfilename
не должен содержать родительский путь. Если я использую путь rel / abs, напримерglob:c:/users/muchwow/*.java
, он работает (обратите внимание, что \\\\ должен использоваться с обратной косой чертой). Шаблонglob:**.java
просто ищет все, что содержит * .java, независимо от родительского пути.У
Path
класса нет понятия «расширение», вероятно, потому, что оно отсутствует в самой файловой системе. Вот почему вам нужно проверить егоString
представление и посмотреть, заканчивается ли оно строкой изчетырехпяти символов.java
. Обратите внимание, что вам нужно другое сравнение, чем простое,endsWith
если вы хотите охватить смешанный регистр, например".JAVA"
и".Java"
:path.toString().toLowerCase().endsWith(".java");
источник
Простое решение:
if( path.toString().endsWith(".java") ) //Do something
Вы должны быть осторожны при использовании метода Path.endsWith. Как вы заявили, метод вернет true, только если он совпадает с подэлементом вашего объекта Path. Например:
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
источник
Невозможно сделать это непосредственно на самом объекте Path.
Я вижу два варианта:
источник