[Java]根据文件取得Mime Type的各种方法

1、mime-util:

该工具可以通过 检测文件扩展名,或者检测magic header
两种技术方式来实现mime类型的检测。

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

POM

<dependency>
    <groupId>eu.medsea.mimeutil</groupId>
    <artifactId>mime-util</artifactId>
    <version>2.1.3</version>
</dependency>

示例代码:

import eu.medsea.mimeutil.MimeUtil;
public class Main {
    public static void main(String[] args) {
        MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector");
        File f = new File ("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

<dependency>
    <groupId>net.sf.jmimemagic</groupId>
    <artifactId>jmimemagic</artifactId>
    <version>0.1.4</version>
</dependency>

示例代码

Magic parser = new Magic() ;
// getMagicMatch accepts Files or byte[],
// which is nice if you want to test streams
MagicMatch match = parser.getMagicMatch(new File("gumby.gif"));
System.out.println(match.getMimeType()) ;  

3、java.net.URL

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

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

示例代码(推荐)

import java.net.FileNameMap;
import java.net.URLConnection;  

public class FileUtils {  

  public static String getMimeType(String fileUrl)
      throws java.io.IOException
    {
      FileNameMap fileNameMap = URLConnection.getFileNameMap();
      String type = fileNameMap.getContentTypeFor(fileUrl);  

      return type;
    }  

    public static void main(String args[]) throws Exception {
      System.out.println(FileUtils.getMimeType("file://c:/temp/test.TXT"));
      // output :  text/plain
    }
  } 

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

import java.net.*;  

public class FileUtils{
  public static String getMimeType(String fileUrl)
    throws java.io.IOException, MalformedURLException
  {
    String type = null;
    URL u = new URL(fileUrl);
    URLConnection uc = null;
    uc = u.openConnection();
    type = uc.getContentType();
    return type;
  }  

  public static void main(String args[]) throws Exception {
    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

查找文件  <java.home>/lib/mime.types

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

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

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

示例代码

import javax.activation.MimetypesFileTypeMap;
import java.io.File;  

class GetMimeType {
  public static void main(String args[]) {
    File f = new File("gumby.gif");
    System.out.println("Mime Type of " + f.getName() + " is " +
                         new MimetypesFileTypeMap().getContentType(f));
    // expected output :
    // "Mime Type of gumby.gif is image/gif"
  }
}  

时间: 2024-07-30 19:19:37

[Java]根据文件取得Mime Type的各种方法的相关文章

Java获取文件类型Mime Type的各种方法

http://chinacheng.iteye.com/blog/857485 http://www.rgagnon.com/javadetails/java-0487.html 谢谢以上的博主

Java如何获取Content-Type的文件类型Mime Type

在Http请求中,有时需要知道Content-Type类型,尤其是上传文件时,更为重要,虽然有些办法可以解决,但都不太准确或者繁琐,索性我发现一个开源的类库能够解决相对完美的解决这个问题,它就是jMimeMagic. jMimeMagic是一个用来检测文件或者数据流的 MIME 类型的 Java 类库. 最新版本是V 0.1.2.需要jar包:commons-logging-1.0.x.jar,log4j-1.2.x.jar 下载地址:点击打开链接 它的用法很简单,如下: File file =

Java读取文件夹大小的6种方法及代码

这篇文章介绍了JAVA读取文件夹大小的几种方法实例,有需要的朋友可以参考一下. (一)单线程递归方式 package com.taobao.test; import java.io.File; public class TotalFileSizeSequential { public static String fileName = "C:\\Documents and Settings\\Administrator\\桌面\\monkeytalk"; // 递归方式 计算文件的大小

Java怎样获取Content-Type的文件类型Mime Type

在Http请求中.有时须要知道Content-Type类型,尤其是上传文件时.更为重要.尽管有些办法可以解决,但都不太准确或者繁琐,索性我发现一个开源的类库可以解决相对完美的解决问题,它就是jMimeMagic. jMimeMagic是一个用来检測文件或者数据流的 MIME 类型的 Java 类库. 最新版本号是V 0.1.2. 须要jar包:commons-logging-1.0.x.jar,log4j-1.2.x.jar 下载地址:点击打开链接 它的使用方法非常easy,例如以下: File

JAVA中文件压缩、解压好方法分享

最近项目中有一个功能需要将文件压缩和解压,我这边最开始使用的是JDK中的类库,在网上找了一些样例,或多或少总是存在一些BUG,而且中文路径乱码的问题始终不能解决.没办法最终只有换方案,最后使用了apache-ant中的工具类来实现的,并且测试通过.源码也是从网上找到的,做了少量修改,这里给大家分享一下. package com.aeai.zip; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; im

MIME TYPE

什么是 MIME TYPE? MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型.是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开.多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式. 它是一个互联网标准,扩展了电子邮件标准,使其能够支持: 非ASCII字符文本:非文本格式附件(二进制.声音.图像等):由多部分(multiple parts)组成的消息体:包含

什么是 MIME TYPE

首先,我们要了解浏览器是如何处理内容的.在浏览器中显示的内容有 HTML.有 XML.有 GIF.还有 Flash --那么,浏览器是如何区分它们,决定什么内容用什么形式来显示呢?答案是 MIME Type,也就是该资源的媒体类型. 媒体类型通常是通过 HTTP 协议,由 Web 服务器告知浏览器的,更准确地说,是通过 Content-Type 来表示的,例如: Content-Type: text/HTML 表示内容是 text/HTML 类型,也就是超文本文件.为什么是"text/HTML&

什么是 MIME TYPE?

文章来源: http://baike.baidu.com/item/MIME https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types http://www.cnblogs.com/jsean/articles/1610265.html MIME(Multipurpose Internet Mail Extensions) 多用途互联网邮件扩展类型: 是设定某种扩展名的文件用一种应用程序来打开的方式类型

什么是MIME type!

一. 在浏览器中可以显示的内容有 HTML. XML. GIF. Flash --那么,浏览器是如何区分它们,决定这些内容用什么形式来显示呢?答案是 MIME Type,也就是该内容(或资源)的媒体类型. 媒体类型通常是通过 HTTP 协议,由 Web 服务器告知浏览器,通过 Content-Type 来表示 例如:  Content-Type: text/HTML 服务器告诉浏览器,要显示的内容为HTML格式的文件,请浏览器的相关部门注意. 实例:  <meta http-equiv="