java获取mimetype

1、mime-util:

该工具可以通过 检测文件扩展名,或者检测magic header

两种技术方式来实现mime类型的检测。

比较可靠,而且轻量级、只依赖于slf4j一个包。2010年后就没有更新了。

POM

[html]view plaincopy

eu.medsea.mimeutil

mime-util

2.1.3

示例代码:

[java]view plaincopy

importeu.medsea.mimeutil.MimeUtil;

publicclassMain {

publicstaticvoidmain(String[] args) {

MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector");

File f =newFile ("c:/temp/mime/test.doc");

Collection mimeTypes = MimeUtil.getMimeTypes(f);

System.out.println(mimeTypes);

//  output : application/msword

}

}

2、JMimeMagic

通过检测文件后缀名去查找文件类型显然不是一个健壮的方法。

JMimeMagic是一个通过检查magic

headers来判断文件或者流的mime 类型的java工具包 。

目前还在持续更新当中、推荐使用。

POM

[html]view plaincopy

net.sf.jmimemagic

jmimemagic

0.1.4

示例代码

[java]view plaincopy

Magic parser =newMagic() ;

// getMagicMatch accepts Files or byte[],

// which is nice if you want to test streams

MagicMatch match = parser.getMagicMatch(newFile("gumby.gif"));

System.out.println(match.getMimeType()) ;

3、java.net.URL

与上面所说的匹配后缀名类似。后缀名和mime-type的映射关系被定义在[jre_home]\lib\content-types.properties

该组件只根据文件扩展名判断mime-type。不是很可靠。

示例代码(推荐)

[java]view plaincopy

importjava.net.FileNameMap;

importjava.net.URLConnection;

publicclassFileUtils {

publicstaticString getMimeType(String fileUrl)

throwsjava.io.IOException

{

FileNameMap fileNameMap = URLConnection.getFileNameMap();

String type = fileNameMap.getContentTypeFor(fileUrl);

returntype;

}

publicstaticvoidmain(String args[])throwsException {

System.out.println(FileUtils.getMimeType("file://c:/temp/test.TXT"));

// output :  text/plain

}

}

示例代码(不推荐:这种方式也是通过扩展名判断mime type的、而且速度很慢)

[java]view plaincopy

importjava.net.*;

publicclassFileUtils{

publicstaticString getMimeType(String fileUrl)

throwsjava.io.IOException, MalformedURLException

{

String type =null;

URL u =newURL(fileUrl);

URLConnection uc =null;

uc = u.openConnection();

type = uc.getContentType();

returntype;

}

publicstaticvoidmain(String args[])throwsException {

System.out.println(FileUtils.getMimeType("file://c:/temp/test.TXT"));

// output :  text/plain

}

}

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

查找文件  /lib/mime.types

查找文件或者资源 META-INF/mime.types

查找文件或者资源 META-INF/mimetypes.default (一般只在 activation.jar 中去查找).

当你需要处理一个传入的一般文件命名的文件的时候,这个方法是非常有趣的。结果出来的速度很快,因为只有扩展名被用来猜测文件的自然属性

示例代码

[java]view plaincopy

importjavax.activation.MimetypesFileTypeMap;

importjava.io.File;

classGetMimeType {

publicstaticvoidmain(String args[]) {

File f =newFile("gumby.gif");

System.out.println("Mime Type of "+ f.getName() +" is "+

newMimetypesFileTypeMap().getContentType(f));

// expected output :

// "Mime Type of gumby.gif is image/gif"

}

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 原文链接:http://blog.csdn.net/zhangerqing http://www.cnblogs....
    孤独杂货铺阅读 5,403评论 0 3
  • 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者...
    RamboLI阅读 4,132评论 0 1
  • 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者...
    lichengjin阅读 4,427评论 0 8
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,213评论 18 399
  • 老妈回家后的第二天,我开始有些想她,尤其在吃饭的时候。 今天早上给自己烤了两片面包,煎了两个鸡蛋,煮了一壶咖啡,对...
    836a784a2482阅读 3,437评论 0 1

友情链接更多精彩内容