Как проверить расширение пути Java 7


Я хотел бы проверить, если a путь (введено в Java 7) заканчивается определенным расширением. Я попробовал endsWith() метод вот так:

Path path = Paths.get("foo/bar.java")
if (path.endsWith(".java")){
    //Do stuff
}

однако, это, кажется, не работает, потому что path.endsWith(".java") возвращает false. Кажется, что endsWith() метод возвращает true только в том случае, если есть полное совпадение для всего после окончательного разделителя каталогов (например,bar.java), что для меня непрактично.

так как я могу проверить расширение файла пути?

4 60

4 ответа:

Ява НИО по PathMatcher предоставляет файловой системы.getPathMatcher (String syntaxAndPattern):

PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*.java");

Path filename = ...;
if (matcher.matches(filename)) {
    System.out.println(filename);
}

посмотреть Найти Файлы учебник для деталей.

The Path класса нет понятия "расширение", вероятно, потому, что сама файловая система не имеет его. Именно поэтому вам нужно проверить его String представление и посмотреть, если он заканчивается на четырепять строка символов .java. Обратите внимание, что вам нужно другое сравнение, чем просто endsWith если вы хотите покрыть смешанный случай, то как ".JAVA" и ".Java":

path.toString().toLowerCase().endsWith(".java");

простое решение:

if( path.toString().endsWith(".java") ) //Do something

вы должны быть осторожны, при использовании пути.метод endsWith. Как вы уже сказали, метод вернет правда только если он совпадает с подэлементом Вашего объекта 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.

есть два варианта, которые я вижу:

  1. преобразуйте путь к файлу и вызовите endsWith в строке, возвращенной файлом.getName ()
  2. вызов toString на пути и вызов endsWith на этой строке.