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áString “txt” 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:
-
No extension - este método retornará umString vazio
-
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:
-
No extension - este método retornará uma string vazia.
-
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:
-
Sem extensão - este método retornará umString vazio
-
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.