Como confirmar o tipo de arquivo

Colegas,

Como podemos confirmar, via código, se um arquivo passado como parâmetro para um método é realmente do tipo texto (.txt), por exemplo?

Você pode pegar o endereço e o nome do arquivo. Por exemplo:

/home/Andre/arquivo.txt

Daí você pega o tamanho da string que representa o caminho. Neste caso são 23 caracteres. Daí você verifica se os 4 ultimos caracteres dessa string são ‘.’ ‘t’ ‘x’ ‘t’ respectivamente. Se for, esse é um arquivo de texto.

Ou no puro amor aos métodos:

    private static String termino(String texto, int caracteres){
        return texto.substring(texto.length() - caracteres, texto.length() - 1);
    }

    private static boolean verificarExtentensao (String path, String extensaoDesejada){
        return termino(path, 4).equalsIgnoreCase(extensaoDesejada);
    }

usar métodos nunca é demais, facilita compreensão do código u.u

mais simples ainda :smiley:

if(file.getName().endsWith(".txt")){
       System.out.println(file.getName());
}

[quote=robertoMoraes]mais simples ainda :smiley:

if(file.getName().endsWith(".txt")){
       System.out.println(file.getName());
}

[/quote]

como programador hobbista .NET, às vezes me sinto envergonhado de subestimar os métodos prontos das classes Java
realmente duvidei que Java tinha o endsWith() LOL

anyway, meu método ainda pega múltiplas extensões u.u

private static boolean verificarExtensao (File arquivo, String extensao){
   return arquivo.getName().endsWith(extensao);
}

(incerteza se a classe do Java pra arquivo é File, foi meio no chute)

Boa noite pessoal n.n

Ok. Perfeito, colegas.
As dicas serão bastante úteis.

Mas como ter a certeza de que um arquivo com a extensão “.txt” é realmente um arquivo no formato texto, sabendo que nada impede de se alterar a extensão de um arquivo.

Há alguma maneira de, abrindo o arquivo com alguma classe java, verificar se o arquivo é um arquivo texto?

hum, não sei em Java, mas a lógica seria algo como…

  1. carrega arquivo (classe File?)
  2. testa a extensão, como postamos acima (primeira consistência)
  3. abre o Stream de leitura de texto
  4. bloco de tratamento de erro pra ler o arquivo inteiro

creio que ele retornaria algum tipo de Exception se tivesse um conteúdo que não fosse texto simples (imagens, etc.)
portanto, um bloco try-catch pra pegar essa Exception faria o desejado

se existe algum método pra isso, eu não sei .-.

basicamente os arquivos são constituídos de bytes e a extensão serve como referencia para sabemos como ler esses bytes (qual tipo de inputStrean utilizar)

talvez haja uma espécie de header indicando como esses bytes forão gravados eu disse talvez… mas axo que não :smiley:

Estou aqui, me matando para achar algo que ajude a fazer esta verificação.

Alguem ai tem ideia de como realmente confirmar se o arquivo é do tipo que está especificado em sua extensão?

Exemplo, se o arquivo .css realmente é um CSS??

Não existe a possibilidade, dado que a “tripa” de bytes pode ser qualquer coisa; confiar na extensão fornecida pelo usuário já é um grande caminho, mas definir mesmo, não! OK, alguns dirão que arquivos tipo PNG, JPG, doc… tem uma espécie de HEADER nos primeiros bytes que poderia indicar, mas aí já deixo pros ninjas!