nidalpres..
5
用我的5美分筹码:
TL,DR
我使用MimetypesFileTypeMap并将任何不存在的mime添加到mime.types文件中,我特别需要它.
现在,长读:
我想首先使用JDK提供的标准工具,如果这不起作用,我会去寻找其他东西.
从文件扩展名确定文件类型
从1.6开始,Java有MimetypesFileTypeMap,如上面的一个答案中所指出的,它是确定mime类型的最简单方法:
new MimetypesFileTypeMap().getContentType( fileName );
在它的vanilla实现中,这没有太大作用(即它适用于.html但不适用于.png).但是,添加您可能需要的任何内容类型非常简单:
在项目的META-INF文件夹中创建名为"mime.types"的文件
为你需要的每个mime类型添加一行,默认实现不提供(有数百种mime类型,列表随着时间的推移而增长).
png和js文件的示例条目是:
image/png png PNG
application/javascript js
从文件内容确定文件类型
从1.7开始,Java有java.nio.file.spi.FileTypeDetector,它定义了一个标准API,用于以特定于实现的方式确定文件类型.
要获取文件的mime类型,您只需使用Files并在代码中执行此操作:
Files.probeContentType(Paths.get("either file name or full path goes here"));
API定义提供了支持从文件名或文件内容(魔术字节)确定文件mime类型的工具.这就是为什么probeContentType()方法抛出IOException,以防此API的实现使用提供给它的Path来实际尝试打开与之关联的文件.
同样,vanilla的实现(JDK附带的实现)还有很多不足之处.
在遥远的银河系中的一些理想世界中,所有这些试图解决这个文件到mime类型问题的库只会实现java.nio.file.spi.FileTypeDetector,你会放入首选的实现库的jar将文件存入您的类路径,就可以了.
在现实世界中,你需要TL,DR部分,你应该找到其名称旁边有大多数星星的图书馆并使用它.对于这种特殊情况,我不需要一个(还有)).