Лучший способ определить тип MIME файла в Java?

Любопытно, как лучше всего в Java получить mime-тип файла. Он должен действительно проверить файл, потому что имена файлов не являются точным индикатором.

В настоящее время я использую следующие, которые кажутся очень удачными или пропущенными

  is = new BufferedInputStream(new FileInputStream(fileName));
  String mimeType = URLConnection.guessContentTypeFromStream(is);
  if(mimeType == null) {
    throw new IOException("can't get mime type of image");
  }

person James    schedule 26.08.2010    source источник
comment
Тем не менее верю, что ваш способ подходит для большинства случаев.   -  person Truong Ha    schedule 28.08.2010
comment
Я использовал класс, который был размещен здесь в качестве ответа: stackoverflow.com/a/10140531/293280   -  person Joshua Pinter    schedule 18.03.2014


Ответы (2)


URLConnection#guessContentTypeFromStream() < / a> или ...FromName() действительно лучшее, что вы можете получить в стандартном API Java SE. Однако существуют сторонние библиотеки, такие как jMimeMagic, которые выполняют свою работу лучше, чем URLConnection#guessXXX() методы.

String mimeType = Magic.getMagicMatch(file, false).getMimeType();

Это поддерживает более широкий спектр типов пантомимы.

person BalusC    schedule 26.08.2010
comment
@BalusC Что вы можете сказать об этом вопросе SO проверьте файл MIME-типа с помощью JMimeMagic? - person catch23; 11.03.2013
comment
@BalusC Я пытался использовать его, но с файлами docx он возвращает, что тип mime - это приложение / zip, что неверно - person Mahmoud Saleh; 22.02.2016

Следующая ссылка дает хорошее сравнение различных способов получения файла типа Mime (она включает в себя такие библиотеки, как Apache Tika, JMimeMagic и т. Д., А также с некоторым собственным кодом): http://www.rgagnon.com/javadetails/java-0487.html

person vikasing    schedule 25.09.2012