美文网首页IO&NIO
java获取mimetype

java获取mimetype

作者: 一个简单搬运工 | 来源:发表于2018-01-09 21:55 被阅读109次

    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"

    }

    }

    相关文章

      网友评论

        本文标题:java获取mimetype

        本文链接:https://www.haomeiwen.com/subject/cazlixtx.html