Есть ли библиотека java, эквивалентная команде файла в unix

Есть ли какая-нибудь java-библиотека, похожая на команду unix file?

ie:

$ file somepicture.png
somepicture.png PNG image, 805 x 292, 8-bit/color RGB, non-interlaced

Команда file — такой хороший инструмент. Мне нужно что-то, что могло бы сказать мне, действительно ли файл такой, каким я хочу его видеть. (например, изображение, документ и т. д.)

Я знаю, что могу запустить команду file, но я ищу java-библиотеку, а не настоящую команду unix.


person Shervin Asgari    schedule 28.04.2010    source источник
comment
В итоге я использовал Apache Tika. JMimeMagic был плохо документирован. (Не то чтобы Тика была лучше, но API было проще IMO)   -  person Shervin Asgari    schedule 18.05.2010


Ответы (7)


Быстрый поиск в Google (для заведомо неочевидных) "обнаружение волшебных файлов Java" вызывает довольно красивую статью, "Получить MIME-тип из файла", в котором предлагается использовать один из следующих способов:

person Hasturkun    schedule 28.04.2010
comment
Спасибо. Я думаю, что один из этих двух должен сделать свое дело. Это действительно документы и изображения, которые мне нужны. - person Shervin Asgari; 28.04.2010

Начиная с Java 1.7 вы можете использовать Files.probeContentType() для проверки файла. По умолчанию он использует механизм платформы для угадывания типа контента, или вы можете подключить свой собственный детектор, если хотите.

person Alan    schedule 05.05.2011

Вы можете посмотреть на jmimemagic (учебник). Мы использовали его некоторое время для проверки загруженных изображений. Пока никаких проблем.

person sfussenegger    schedule 28.04.2010

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

http://www.rgagnon.com/javadetails/java-0487.html

person Laurent    schedule 28.04.2010
comment
+1 за предоставление решения только для JDK. Я не уверен, насколько хорош этот метод, но это может быть то, что ищет пользователь. - person Brett Kail; 28.04.2010
comment
@bkail javax.activation.MimetypesFileTypeMap проверяет только расширение файла, что, безусловно, не является надежным способом определить, действительно ли файл является тем, чем я хочу его видеть. - person sfussenegger; 28.04.2010
comment
Да, решение JDK не работает как file в unix. file действительно смотрит на файл и говорит, что это такое. Не заботится о расширении, как это делает Windows - person Shervin Asgari; 28.04.2010
comment
@sfussenegger java.net.URLConnection.guessContentTypeFromStream(InputStream), безусловно, не использует расширения файлов для определения. - person Brett Kail; 29.04.2010
comment
@bkail Это не упоминалось в связанной статье, не так ли? Во всяком случае, это не работает надежно. Я только что попробовал, и это не удалось для простого изображения jpg. - person sfussenegger; 29.04.2010
comment
@sfussenegger Ха, я думал, что getContent/getContentType использует предположениеContentTypeFromStream. Ах, по-видимому, только для jar: URL-адресов. Спасибо за разъяснения... - person Brett Kail; 29.04.2010

Взгляните на mime-utils. Работает с контентом и/или с расширениями.

person openCage    schedule 28.04.2010

Ближайшая вещь в JDK — это URLConnection.guessContentTypeFromStream

person finnw    schedule 18.05.2010

Искал то же самое и нашел это: https://github.com/j256/simplemagic - кажется, что это клон файла, он даже использует копию встроенного файла magic file.

person Markus Duft    schedule 21.01.2019