Estou precisando testar o mime type de um arquivo, mas nenhum método que pesquisei funcionou. (testei com mime-util, JMimeMagic, activation e java.net.. Em alguns retorna tipo incorreto (activation retorna application/octetstream quando seria text/plain e quando tem .txt, o java.net. ‘resolve’ lendo a extensão, mas sem extensão devolve null).
Preciso testar para abrir apenas arquivos de texto puro (text/plain), sendo que os arquivos podem ter ou não extensão.
Olá amigo.
Veja que existem algumas sutilezas com este assunto.
Não é simples recuperar o mime type de um arquivo simplesmente porque confiar na extensão indicada no nome do arquivo não é nada confiável… E se o arquivo simplesmente não contiver a extensão? Ou se estiver errada? Há casos em que uma extensão pode simplesmente significar tipos diferentes, como o JPG que se refere a diferentes codificações…
Uma abordagem simples, mas ingenua e não confiável, é mapear as extensoes para mime types. Ex: txt - text/plain.
EDIT: se esta primeira solucao atender, na internet voce acha esse mapeamento facil para os tipos mais comuns.
Outra abordagem é ler um comço do arquivo e partir dai inferir o tipo… É bem mais complexo mas em alguns casos é o que precisa ser feito.
EDIT: isso parte do pressuposto que a maioria dos arquivos possuem cabeaclhos fixos e bem definidos (bem formados).
OBS: se seu caso de alguma forma se relacionar com web, alguns sites indicam o mime type do tipo ao enviar o arquivo em resposta a uma requisicao… Veja como os servlets possuem este recurso. Talvez isso te ajude de alguma forma caso seu proposito seja identificar os tipos de arquivos da web. O protocolo HTTP tem essa informacao tambem, embora nem sempre esteja preenchida e o browser entao carregue errado, outros infiram, etc.
sigma2k
Icaro,
Esclarecendo melhor minha questão, meu aplicativo não é web, é um editor de texto para arquivos de texto puro, usando swing.
Não é um ‘simples’ editor, identifica diversos tipos de campos de dados e os edita de forma adequada.
O que preciso é apenas identificar o tipo de arquivo, para não tentar abrir outros tipos, o que pode causar um crash no aplicativo.
Como vc sugeriu, vou tentar fazer a leitura de diversos tipos de arquivo e tratar os erros, quando acontecerem.