mime-util:
工具可以通过 检测文件扩展名,或者检测magic header 两种技术方式来实现mime类型的检测。
只依赖于slf4j一个包
POM
1. <dependency>
2. <groupId>eu.medsea.mimeutil</groupId>
3. <artifactId>mime-util</artifactId>
4. <version>2.1.3</version>
5. </dependency>
示例代码:
1. import eu.medsea.mimeutil.MimeUtil;
2. public class Main {
3. public static void main(String[] args) {
4. "eu.medsea.mimeutil.detector.MagicMimeMimeDetector");
5. new File ("c:/temp/mime/test.doc");
6. Collection<?> mimeTypes = MimeUtil.getMimeTypes(f);
7. System.out.println(mimeTypes);
8. // output : application/msword
9. }
10. }
2、
JMimeMagic
通过检测文件后缀名去查找文件类型显然不是一个健壮的方法。
JMimeMagic是一个通过检查magic headers来判断文件或者流的mime 类型的java工具包 。
目前还在持续更新当中、推荐使用。
POM
1. <dependency>
2. <groupId>net.sf.jmimemagic</groupId>
3. <artifactId>jmimemagic</artifactId>
4. <version>0.1.4</version>
5. </dependency>
1. Magic parser = new Magic() ;
2. // getMagicMatch accepts Files or byte[],
3. // which is nice if you want to test streams
4. MagicMatch match = parser.getMagicMatch(new File("gumby.gif"));
5. System.out.println(match.getMimeType()) ;
3、
.URL
与上面所说的匹配后缀名类似。后缀名和mime-type的映射关系被定义在[jre_home]\lib\content-types.properties
该组件只根据文件扩展名判断mime-type。不是很可靠。
示例代码(推荐)
1. import .FileNameMap;
2. import .URLConnection;
3.
4. public class FileUtils {
5.
6. public static String getMimeType(String fileUrl)
7. throws java.io.IOException
8. {
9. FileNameMap fileNameMap = URLConnection.getFileNameMap();
10. String type = fileNameMap.getContentTypeFor(fileUrl);
11.
12. return type;
13. }
14.
15. public static void main(String args[]) throws Exception {
16. "file://c:/temp/test.TXT"));
17. // output : text/plain
18. }
19. }
示例代码(不推荐:这种方式也是通过扩展名判断mime type的、而且速度很慢)
1. import .*;
2.
3. public class FileUtils{
4. public static String getMimeType(String fileUrl)
5. throws java.io.IOException, MalformedURLException
6. {
7. null;
8. new URL(fileUrl);
9. null;
10. uc = u.openConnection();
11. type = uc.getContentType();
12. return type;
13. }
14.
15. public static void main(String args[]) throws Exception {
16. "file://c:/temp/test.TXT"));
17. // output : text/plain
18. }
19. }
4、
javax.activation.MimetypesFileTypeMap
需要引入activation.jar这个jar包 , 他可以从下面这个网站获得 http://java.sun.com/products/javabeans/glasgow/jaf.html
.
这个MimetypesFileMap类会映射出一个file的Mime Type,这些Mime Type类型是在activation.jar包里面的资源文件中定义的
自带的mime-type列表中的数量有限,但是它提供了方法让您可以很方便的添加更多的mime类型
MimetypesFileTypeMap 会在用户系统的很多地方去查找文件的MIME类型。当一个查找MIME类型的请求到达后,他会按照下面这个顺序去查找MIME类型
首先通过程序将文件添加到MimetypesFileTypeMap的一个实例中
查找用户的home路径下的文件 .mime.types
查找文件 <java.home>/lib/mime.types
查找文件或者资源 META-INF/mime.types
查找文件或者资源 META-INF/mimetypes.default (一般只在 activation.jar 中去查找).
当你需要处理一个传入的一般文件命名的文件的时候,这个方法是非常有趣的。结果出来的速度很快,因为只有扩展名被用来猜测文件的自然属性
示例代码
1. import javax.activation.MimetypesFileTypeMap;
2. import java.io.File;
3.
4. class GetMimeType {
5. public static void main(String args[]) {
6. new File("gumby.gif");
7. "Mime Type of " + f.getName() + " is " +
8. new MimetypesFileTypeMap().getContentType(f));
9. // expected output :
10. // "Mime Type of gumby.gif is image/gif"
11. }
12. }
















