Java获取文件ContentType案例

 更新时间:2020年08月24日 14:57:10   作者:ouyangjun__  
这篇文章主要介绍了Java获取文件ContentType案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

源码如下:

package com.oysept;
 
import java.io.File;
import java.io.IOException;
import java.net.FileNameMap;
import java.net.URLConnection;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths; 
import javax.activation.MimetypesFileTypeMap;
 
/**
 * Java获取文件ContentType
 * @author ouyangjun
 */
public class ContentTypeUtils {
 
  public static void main(String[] args) {
    // 文件路径
    String fileUrl = "C:\\Users\\admin\\Desktop\\tttt.rar";
    // 方式一
    getContentTypeByLocal(fileUrl);
    
    // 方式二,推荐使用
    getContentType(fileUrl);
		
    // 方式三
    getContentTypeByType(fileUrl);
  }
 
  /**
   * 方式一
   * 该方式只支持本地文件,有时候会存在获取为null的情况
   * @param fileUrl
   */
  public static String getContentTypeByLocal(String fileUrl) {
    String contentType = null;
    Path path = Paths.get(fileUrl);
    try {
      contentType = Files.probeContentType(path);
    } catch (IOException e) { 
      e.printStackTrace();
    }
    System.out.println("getContentTypeByLocal, File ContentType is : " + contentType);
    return contentType;
  }
	
  /**
   * 方式二
   * 该方式支持本地文件,也支持http/https远程文件
   * @param fileUrl
   */
  public static String getContentType(String fileUrl) {
    String contentType = null;
    try {
      contentType = new MimetypesFileTypeMap().getContentType(new File(fileUrl));
    } catch (Exception e) {
      e.printStackTrace();
    }
    System.out.println("getContentType, File ContentType is : " + contentType);
    return contentType;
  }
	
  /**
   * 方式三
   * @param fileUrl,有时候会存在获取为null的情况
   */
  public static String getContentTypeByType(String fileUrl) {
    String contentType = null;
    try {
      FileNameMap fileNameMap = URLConnection.getFileNameMap();
      contentType = fileNameMap.getContentTypeFor(fileUrl);
    } catch (Exception e) {
      e.printStackTrace();
    }
    System.out.println("getContentTypeByType, File ContentType is : " + contentType);
    return contentType;
  }
}

打印效果图:

补充知识:ImageTypeUtil工具类:Java获取URL对应的文件类型及其后缀

Java获取URL对应的文件类型及其后缀的主流方法有三种:

1、根据文件头部数据来判断。

通常需要先下载再判断,但是如果想要在下载的时候确定文件后缀,就做不到了,而且获取的文件类型不是很准确。

2、使用lastIndexOf去解析url字符串。

这种方法最简单高效。

3、UrlConnection获取ContentType的类型推测出文件的类型。

这里我封装了一个工具类,将第二种方法和第三种方法结合,但是不是用lastIndexOf,而是判断url字符串是否包含图片的后缀。

package johny.utils; 
import java.net.URLConnection; 
/**
 * @author Johny 林子豪 
 */
public enum ImageTypeUtil {
 
  PNG(".png", "image/png"),
  JPG(".jpg", "image/jpeg"),
  BMP(".bmp", "image/bmp"),
  JPEG(".jpeg", "image/jpeg"),
  GIF(".gif", "image/gif"),
  TIF(".tif", "image/tiff"),//标签图像文件格式(Tagged Image File Format,简写为TIFF)是一种主要用来存储包括照片和艺术图在内的图像的文件格式。它最初由Aldus公司与微软公司一起为PostScript打印开发。
  TIFF(".tiff", "image/tiff"),
  FAX(".fax", "image/fax"),
  ICO(".ico", "image/x-icon"),
  JFIF(".jfif", "image/jpeg"),
  JPE(".jpe", "image/jpeg"),
  NET(".net", "image/pnetvue"),
  WBMP(".wbmp", "image/vnd.wap.wbmp");
  //如果有其他的mime类型,
 
  /**
   * 后缀名
   */
  final String mSuffix;
  final String mMIME;
 
  ImageTypeUtil(String suffix, String mime) {
    this.mSuffix = suffix;
    this.mMIME = mime;
  }
 
  public static String getSuffixFromUrl(String url) {
 
    for (ImageTypeUtil fileType : values()) {
      if (url.contains(fileType.suffix())) {
        return fileType.suffix();
      }
    }
    String contentType = getMIMETypeFromUrl(url);
    if (contentType == null) return null;
    return mimeMapingSuffix(contentType);
  }
 
  public static String getMIMETypeFromUrl(String url) {
    if (url == null || url.isEmpty()) {
      return null;
    }
    return URLConnection.guessContentTypeFromName(url);
  }
 
  /**
   * mime类型对应的后缀名
   */
  public static String mimeMapingSuffix(String mime) {
    for (ImageTypeUtil fileType : values()) {
      if (fileType.mime().equals(mime)) {
        return fileType.suffix();
      }
    }
    return null;
  }
 
  public String mime() {
    return mMIME;
  }
 
  /**
   * 获取后缀名 * * @return 指定类型的后缀名,如'.mp4'
   */
  public String suffix() {
    return this.mSuffix;
  } 
}

以上这篇Java获取文件ContentType案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringCloud Alibaba 基本开发框架搭建过程

    SpringCloud Alibaba 基本开发框架搭建过程

    这篇文章主要介绍了SpringCloud Alibaba 基本开发框架搭建过程,开发工具选用的idea,本文通过图文实例相结合给大家分享搭建全过程,需要的朋友可以参考下
    2021-06-06
  • 超个性修改SpringBoot项目的启动banner的方法

    超个性修改SpringBoot项目的启动banner的方法

    这篇文章主要介绍了超个性修改SpringBoot项目的启动banner的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Java 模拟银行自助终端系统

    Java 模拟银行自助终端系统

    本系统模拟银行用户使用ATM机开户、查询、存款、取款功能,要求使用java语言编程实现。这篇文章主要介绍了Java 模拟银行自助终端系统的相关资料,需要的朋友可以参考下
    2016-10-10
  • java如何动态执行while循环

    java如何动态执行while循环

    这篇文章主要介绍了java如何动态执行while循环问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • SpringBoot项目的两种发布方式

    SpringBoot项目的两种发布方式

    本文主要介绍了SpringBoot项目的两种发布方式,包含jar包发布和war包发布,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • Java I/O技术之文件操作详解

    Java I/O技术之文件操作详解

    这篇文章主要介绍了Java I/O技术之文件操作详解,需要的朋友可以参考下
    2014-07-07
  • mybatis整合spring实现开启mapper.xml映射文件扫描

    mybatis整合spring实现开启mapper.xml映射文件扫描

    这篇文章主要介绍了mybatis整合spring实现开启mapper.xml映射文件扫描,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • java通过Idea远程一键部署springboot到Docker详解

    java通过Idea远程一键部署springboot到Docker详解

    这篇文章主要介绍了java通过Idea远程一键部署springboot到Docker详解,Idea是Java开发利器,springboot是Java生态中最流行的微服务框架,docker是时下最火的容器技术,那么它们结合在一起会产生什么化学反应呢?的相关资料
    2019-06-06
  • java内部类之成员内部类、局部内部类和匿名内部类用法及说明

    java内部类之成员内部类、局部内部类和匿名内部类用法及说明

    这篇文章主要介绍了java内部类之成员内部类、局部内部类和匿名内部类的用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • 浅谈为什么Java中1000==1000为false而100==100为true

    浅谈为什么Java中1000==1000为false而100==100为true

    这篇文章主要介绍了浅谈为什么Java中1000==1000为false而100==100为true,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论