Como obter a extensão de arquivo de um arquivo em Java

Como obter a extensão de arquivo de um arquivo em Java

1. Visão geral

Neste tutorial rápido, mostraremos como obter a extensão do arquivo programaticamente em Java. We’ll focus on three major approaches to the problem.

Em nossas implementações, os caracteres após o final ‘.' serão retornados.

Portanto, como um exemplo rápido, se nosso nome de arquivo forjarvis.txt, ele retornaráStringtxt” como a extensão do arquivo.

2. Obtendo a extensão do arquivo

Para cada abordagem, aprenderemos como implementá-la e acompanhar o que acontece em dois casos especiais:

  • quando um nome de arquivo não tem extensões, como um arquivomakefile

  • e se um nome de arquivo consiste apenas na extensão, como.gitignore ou.DS_Store.

2.1. Abordagem de Manuseio SimplesString

Com esta abordagem, usaremos uma abordagem simples de manipulaçãoString para encontrar a extensão:

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

Este método irá verificar o ponto ‘. ' ocorrência no nome do arquivo especificado.

Se existir, encontrará a última posição do ponto ‘. e retorne os caracteres depois disso, os caracteres após o último ponto ‘. ' conhecida como extensão de arquivo.

Casos especiais:

  1. No extension - este método retornará umString vazio

  2. Only extension - este método retornaráString após o ponto, por exemplo, “gitignore”

2.2. FilenameUtils.getExtension do Apache Commons IO

Na segunda abordagem, encontraremos a extensão usando uma classe de utilitário fornecida pela biblioteca Apache Commons IO:

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

Aqui, em vez do nome do arquivo, também podemos especificar o caminho completo para um arquivoe.g.C:/example/com/demo.java“.

O métodogetExtension(String) verificará se ofilename fornecido está vazio ou não.

Sefilename for vazio ou nulo,getExtension(String filename) retornará a instância que foi fornecida. Caso contrário, ele retorna a extensão do nome do arquivo.

Para fazer isso, ele usa o métodoindexOfExtension(String) que, por sua vez, usalastIndexof(char) para encontrar a última ocorrência do ‘. '. Esses métodos são fornecidos porFilenameUtils.

Este método também verifica se não há separador de diretório após o último ponto usando outro métodoindexOfLastSeparator(String),, que tratará um arquivo no formato Unix ou Windows.

Casos especiais:

  1. No extension - este método retornará uma string vazia.

  2. Only extension - este método retornaráString após o ponto, por exemplo, “gitignore”

2.3. Usando a biblioteca Guava

Nesta última abordagem, usaremos a biblioteca Guava para encontrar a extensão.

Para adicionar uma biblioteca Guava, podemos adicionar a seguinte dependência ao nossopom.xml:


    com.google.guava
    guava
    24.1.1-jre

Para a dependência mais recente, podemos verificarMaven Central.

Depois de adicionar a biblioteca, podemos simplesmente usar seu métodogetFileExtension:

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

O métodogetFileExtension(String) verificará primeiro se ofilename fornecido está vazio.

Sefilename não estiver vazio, ele criará uma instânciaFile convertendo ofilename fornecido em um caminho abstrato e chamará o métodoFile’sgetName() ele, que retornará o nome do arquivo denotado por este caminho abstrato, ou a string vazia se ofilename fornecido estiver vazio.

Com base neste valor de retorno, ele busca o índice da última ocorrência de ‘. ' usando o método embutido da classeStringlastIndexOf(char).

Casos especiais:

  1. Sem extensão - este método retornará umString vazio

  2. Somente extensão - este método retornaráString após o ponto, por exemplo, “gitignore”

3. Conclusão

Ao escolher entre ApacheCommons eGuava, enquanto ambas as bibliotecas têm alguns recursos comuns e também têm funcionalidades que estão ausentes em sua alternativa.

Isso significa que, se certa funcionalidade for necessária, escolha aquela que a possui. Caso contrário, se forem necessários mais cenários personalizados, escolha o que mais faz o que você precisa e fique à vontade para envolvê-lo com sua própria implementação para obter o resultado desejado.

Além disso, verifique todos os exemplos neste artigoon Github.