如何用Java获取媒体文件的类型(MIME type)?| Java Debug 笔记

本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看<活动链接>

提问:如何用Java获取媒体文件的类型(MIME type)

到目前为止我尝试了JmimeMagicMime Util。第一个报内存异常,第二个的流没有正确关闭。

如何获取文件的实际类型呢(而不仅仅是获取扩展名)?

回答一

不幸的是,下面这段很多人推荐的代码无法完全满足你的需求

mimeType = file.toURL().openConnection().getContentType();
复制代码

你可以尝试下面这段代码,它的优点不只是查看文件扩展名,还可以查看文件内容。

mimeType= URLConnection.guessContentTypeFromName(file.getName());
复制代码
InputStream is = new BufferedInputStream(new FileInputStream(file));
mimeType = URLConnection.guessContentTypeFromStream(is);
 //...close stream
复制代码

正如你所说的,mime内置的类型是十分有限的,例如不包括MSWord和PDF。因此,如果你想获得一个更大范围的类型的话,你可以使用第三方包,比如Mime Util(这个库不管是在文件扩展名还是文件内容的操作上都十分优秀)

回答二

如果你使用了Apache Tika,你只需要三行代码就能搞定:

File file = new File("/path/to/file");
Tika tika = new Tika();
System.out.println(tika.detect(file));
复制代码

如果你使用了groovy,你可以直接把下面代码复制过去运行

@Grab('org.apache.tika:tika-core:1.14')
import org.apache.tika.Tika;

def tika = new Tika()
def file = new File("/path/to/file")
println tika.detect(file)
复制代码

记住,它的API是很丰富的,它可以解析任何文件,从tika core 1.14开始,你可以使用下面这些方法:

String  detect(byte[] prefix)
String  detect(byte[] prefix, String name)
String  detect(File file)
String  detect(InputStream stream)
String  detect(InputStream stream, Metadata metadata)
String  detect(InputStream stream, String name)
String  detect(Path path)
String  detect(String name)
String  detect(URL url)
复制代码

查看文档获取更多信息

文章翻译自Stack Overflow:stackoverflow.com/questions/5…

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享