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

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

1. обзор

В этом кратком руководстве мы покажем, как программно получить расширение файла на Java. We’ll focus on three major approaches to the problem.с

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

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

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

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

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

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

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

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

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

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

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

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

  1. No extension - этот метод вернет пустойString

  2. Only extension - этот метод вернетString после точки, например “gitignore”

2.2. FilenameUtils.getExtension из Apache Commons IO

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

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

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

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

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

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

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

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

  1. No extension - этот метод вернет пустую строку.

  2. Only extension - этот метод вернетString после точки, например “gitignore”

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

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

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


    com.google.guava
    guava
    24.1.1-jre

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

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

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

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

Еслиfilename не пуст, то он создаст экземплярFile путем преобразования заданногоfilename в абстрактный путь и вызовет методFile’sgetName() поверх it, который вернет имя файла, обозначенного этим абстрактным путем, или пустую строку, если заданныйfilename пуст.

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

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

  1. Без расширения - этот метод вернет пустойString

  2. Только расширение - этот метод вернетString после точки, например “gitignore”

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

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

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

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