在Java中获取文件的Mime类型

时间:2020-03-05 18:49:54  来源:igfitidea点击:

我只是想知道大多数人如何从Java文件中获取mime类型?到目前为止,我已经尝试了两个工具:JMimeMagicMime-Util

第一个给我内存异常,第二个没有正确关闭其流。我只是想知道其他人是否拥有他们使用和正常工作的方法/库?

解决方案

回答

很遗憾,

mimeType = file.toURL().openConnection().getContentType();

不起作用,因为使用URL会锁定文件,例如,该文件不可删除。

但是,我们有:

mimeType= URLConnection.guessContentTypeFromName(file.getName());

还有以下内容,其优点是不仅可以使用文件扩展名,而且还可以浏览内容

InputStream is = new BufferedInputStream(new FileInputStream(file));
mimeType = URLConnection.guessContentTypeFromStream(is);
 //...close stream

但是,如上面的评论所建议的那样,内置的mime类型表非常有限,例如不包括MSWord和PDF。因此,如果要一概而论,我们将需要使用Mime-Util(这是一个很棒的库,同时使用文件扩展名和内容)来超越内置库。

回答

JAF API是JDK 6的一部分。查看javax.activation包。

最有趣的类是实际的MIME类型持有者javax.activation.MimeType和javax.activation.MimetypesFileTypeMap类,它们的实例可以将MIME类型解析为文件的String:

String fileName = "/path/to/file";
MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap();

// only by file name
String mimeType = mimeTypesMap.getContentType(fileName);

// or by actual File instance
File file = new File(fileName);
mimeType = mimeTypesMap.getContentType(file);