在Java中获取文件的Mime类型
时间:2020-03-05 18:49:54 来源:igfitidea点击:
我只是想知道大多数人如何从Java文件中获取mime类型?到目前为止,我已经尝试了两个工具:JMimeMagic
和Mime-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);