Java: Como obter a extensão de um arquivo


Há várias formas de extrair a extensão do nome de um arquivo. A forma mais simples e legível para o o seu código, é utilizando o método FilenameUtils.getExtension da biblioteca Apache Commons IO.

Veja no exemplo abaixo como obter a extensão do nome de um arquivo com FilenameUtils.getExtension.

package br.com.dicasdejava.util;

import org.apache.commons.io.FilenameUtils;

public class ExtrairExtensaoArquivoComFilenameUtils {

    public static void main(String[] args) {
        //Exemplo de arquivo do Windows
        String nomeCompletoDoArquivo = "C:\\temp\\arquivo de teste.txt";
        String extensaoDoArquivo = FilenameUtils.getExtension(nomeCompletoDoArquivo);
        System.out.println(extensaoDoArquivo);

        //Exemplo de arquivo sem extensão
        nomeCompletoDoArquivo = "C:\\temp\\arquivo sem extensao";
        extensaoDoArquivo = FilenameUtils.getExtension(nomeCompletoDoArquivo);
        System.out.println(extensaoDoArquivo);

        //Exemplo de arquivo do Linux/Unix/OSX
        nomeCompletoDoArquivo = "/home/gustavo/arquivo de imagem.png";
        extensaoDoArquivo = FilenameUtils.getExtension(nomeCompletoDoArquivo);
        System.out.println(extensaoDoArquivo);
    }

}

Saída:

txt

png

Importação da biblioteca Apache Commons IO

Como a Apache Commons IO não é uma biblioteca nativa do Java, nós precisamos adicionar o arquivo jar da biblioteca no classpath da nossa aplicação.

Você pode baixar o jar da Apache Commons IO diretamente no site da Apache.

Se você estiver utilizando o maven no seu projeto, basta adicionar a dependência do Apache Commons IO no seu arquivo pom.xml.

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-io</artifactId>
    <version>1.3.2</version>
</dependency>

Indico a importação do Apache Commons IO porque, além do método que mostrei aqui, há muitos outros métodos úteis nessa biblioteca.

Obter extensão do arquivo com Java PURO

Podemos utilizar uma lógica para obter a extensão do arquivo utilizando apenas java. Sem a necessidade de usar a biblioteca citada anteriormente.

Para isso, podemos fazer um substring do nome do arquivo, a partir da posição (+1) do último ponto encontrado no nome do arquivo.

Mas devemos nos atentar para a verificação se o arquivo tem extensão, ou seja, se tem "ponto" no nome do arquivo, pois se o nome do arquivo não tiver ponto, vamos obter o nome completo do arquivo ao invés de uma "extensão vazia".

Observe no exemplo.

package br.com.dicasdejava.util;

public class ExtrairExtensaoArquivoComJavaPuro {

    public static void main(String[] args) {

        //Exemplo de arquivo do Windows
        String nomeCompletoDoArquivo = "C:\\temp\\arquivo de teste.docx";
        String extensaoDoArquivo = getFileExtension(nomeCompletoDoArquivo);
        System.out.println(extensaoDoArquivo);

        //Exemplo de arquivo sem extensão
        nomeCompletoDoArquivo = "C:\\temp\\arquivo sem extensao";
        extensaoDoArquivo = getFileExtension(nomeCompletoDoArquivo);
        System.out.println(extensaoDoArquivo);

        //Exemplo de arquivo do Linux/Unix/OSX
        nomeCompletoDoArquivo = "/home/gustavo/arquivo de imagem.jpg";
        extensaoDoArquivo = getFileExtension(nomeCompletoDoArquivo);
        System.out.println(extensaoDoArquivo);

    }

    static String getFileExtension(String filename) {
        if (filename.contains("."))
            return filename.substring(filename.lastIndexOf(".") + 1);
        else
            return "";
    }

}

Saída:

docx

jpg

Referências:

  1. Javadoc: FilenameUtils
  2. Maven: Apache Commons IO
  3. Javadoc: String