Перейти к основному содержимому

Как получить расширение файла в Java

· 3 мин. чтения

1. Обзор

В этом кратком руководстве мы покажем, как программно получить расширение файла в Java. Мы сосредоточимся на трех основных подходах к проблеме.

В наших реализациях символы после финального ' .' будет возвращен.

Поэтому, в качестве быстрого примера, если имя нашего файла jarvis.txt , тогда он вернет строку « txt» в качестве расширения файла.

2. Получение расширения файла

Для каждого подхода мы узнаем, как его реализовать, и посмотрим, что происходит в двух особых случаях:

  • когда имя файла не имеет расширений, например, файл makefile
  • и если имя файла состоит только из расширения, например .gitignore или .DS_Store.

2.1. Простой подход к обработке строк

При таком подходе мы будем использовать простой подход к обработке строк для поиска расширения:

public Optional<String> getExtensionByStringHandling(String filename) {
return Optional.ofNullable(filename)
.filter(f -> f.contains("."))
.map(f -> f.substring(filename.lastIndexOf(".") + 1));
}

Этот метод проверит наличие точки '.' появление в данном имени файла.

Если он существует, то он найдет последнюю позицию точки '.' и вернуть символы после этого, символы после последней точки '.' известный как расширение файла.

Особые случаи:

  1. Без расширения — этот метод вернет пустую строку .
  2. Только расширение — этот метод вернет строку после точки, например, «gitignore».

2.2. FilenameUtils.getExtension из Apache Commons IO

Во втором подходе мы найдем расширение, используя служебный класс, предоставляемый библиотекой ввода-вывода Apache Commons:

public String getExtensionByApacheCommonLib(String filename) {
return FilenameUtils.getExtension(filename);
}

Здесь вместо имени файла мы также можем указать полный путь к файлу, например , « C:/foreach/com/demo.java ».

Метод getExtension(String) проверит, является ли данное имя файла пустым или нет.

Если имя файла пустое или нулевое, getExtension(String filename) вернет экземпляр, который ему был дан. В противном случае возвращается расширение имени файла.

Для этого он использует метод indexOfExtension(String) , который, в свою очередь, использует lastIndexof(char) для поиска последнего вхождения '.'. Оба эти метода предоставляются FilenameUtils .

Этот метод также проверяет отсутствие разделителя каталогов после последней точки с помощью другого метода indexOfLastSeparator(String), который будет обрабатывать файл в формате Unix или Windows.

Особые случаи:

  1. Без расширения — этот метод вернет пустую строку.
  2. Только расширение — этот метод вернет строку после точки, например, «gitignore».

2.3. Использование библиотеки гуавы

В этом последнем подходе мы будем использовать библиотеку Guava для поиска расширения.

Чтобы добавить библиотеку Guava, мы можем добавить следующую зависимость в наш pom.xml:

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>

Для последней зависимости мы можем проверить Maven Central .

После добавления библиотеки мы можем просто использовать ее метод getFileExtension :

public String getExtensionByGuava(String filename) {
return Files.getFileExtension(filename);
}

Метод getFileExtension(String) сначала проверит, является ли данное имя файла пустым.

Если имя файла не пусто, то он создаст экземпляр File , преобразовав данное имя файла в абстрактное имя пути и вызвав над ним метод getName() файла , который вернет имя файла, обозначенное этим абстрактным путем, или пустая строка, если данное имя файла пусто.

На основе этого возвращаемого значения он извлекает индекс последнего вхождения '.' с помощью встроенного метода класса String lastIndexOf(char) .

Особые случаи:

  1. Без расширения — этот метод вернет пустую строку .
  2. Только расширение — этот метод вернет строку после точки, например, «gitignore».

3. Заключение

При выборе между Apache Commons и Guava обе библиотеки имеют некоторые общие функции, а также функции, отсутствующие в их альтернативе.

Это означает, что если требуется определенная функциональность, выберите ту, в которой она есть. В противном случае, если требуется больше пользовательских сценариев, выберите тот, который делает большую часть того, что вам нужно, и не стесняйтесь обернуть его собственной реализацией, чтобы получить желаемый результат.

Также ознакомьтесь со всеми примерами в этой статье на Github .