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));
}
Этот метод проверит наличие точки '.' появление в данном имени файла.
Если он существует, то он найдет последнюю позицию точки '.' и вернуть символы после этого, символы после последней точки '.' известный как расширение файла.
Особые случаи:
- Без расширения — этот метод вернет пустую
строку .
- Только расширение — этот метод вернет
строку
после точки, например,«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.
Особые случаи:
- Без расширения — этот метод вернет пустую строку.
- Только расширение — этот метод вернет
строку
после точки, например,«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)
.
Особые случаи:
- Без расширения — этот метод вернет пустую
строку .
- Только расширение — этот метод вернет
строку
после точки, например,«gitignore».
3. Заключение
При выборе между Apache Commons
и Guava
обе библиотеки имеют некоторые общие функции, а также функции, отсутствующие в их альтернативе.
Это означает, что если требуется определенная функциональность, выберите ту, в которой она есть. В противном случае, если требуется больше пользовательских сценариев, выберите тот, который делает большую часть того, что вам нужно, и не стесняйтесь обернуть его собственной реализацией, чтобы получить желаемый результат.
Также ознакомьтесь со всеми примерами в этой статье на Github .