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案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • JAVA读取文本文件内容实例代码

    java读取文本文件内容 今天写代码写着要调试一个很长的字符串,就用idea新建了text文本,存放长字符串的内容.结果发现读取文本文件内容的java代码不怎么会写了,果然是面向百度编程,面向control c 或者control v编程,尴尬. 最终的代码如下: public static String readFileContent(String fileName) { File file = new File(fileName); BufferedReader reader = null;

  • JavaWeb读取配置文件的四种方法

    方式一:采用ServletContext读取 获取配置文件的realpath,然后通过文件流读取出来或者通过方法getReasurceAsStream(). 因为是用ServletContext读取文件路径,所以配置文件可以放入在WEB-INF的classes目录中,也可以在应用层级及WEB-INF的目录中.文件存放位置具体在eclipse工程中的表现是:可以放在src下面,也可放在WEB-INF及Web-Root下面等.因为是读取出路径后,用文件流进行读取的,所以可以读取任意的配置文件包括xm

  • Java中读取文件转换为字符串的方法

    方式一 /** 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. 当然也是可以读字符串的. */ /* 貌似是说网络环境中比较复杂,每次传过来的字符是定长的,用这种方式?*/ public String readString1() { try { //FileInputStream 用于读取诸如图像数据之类的原始字节流.要读取字符流,请考虑使用 FileReader. FileInputStream inStream=this.openFileInput(FILE_NAME)

  • java读取文件内容为string字符串的方法

    直接就把项目中的方法贴出来吧 /** * 读出城市列表文件 */ private String readCityFile() { File file02 = new File(path_xinfu, "/cityList.json"); FileInputStream is = null; StringBuilder stringBuilder = null; try { if (file02.length() != 0) { /** * 文件有内容才去读文件 */ is = new

  • 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.Mimetype

  • java获取文件扩展名的方法小结【正则与字符串截取】

    本文实例讲述了java获取文件扩展名的方法.分享给大家供大家参考,具体如下: 问题描述:  有一个String类型:String imageName = "zy.jpg"; 请问我如何截取"."后面的后辍名. 解决方法一:使用正则表达式 package csdnTest; import java.util.regex.*; public class CSDNTest { public static void main(String[] ss) { String s=

  • JAVA获取文件绝对路径的方法

    本文实例讲述了JAVA获取文件绝对路径的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: /** * 获取一个类的class文件所在的绝对路径. 这个类可以是JDK自身的类,也可以是用户自定义的类,或者是第三方开发包里的类. * 只要是在本程序中可以被加载的类,都可以定位到它的class文件的绝对路径. * * @param cls *            一个对象的Class属性 * @return 这个类的class文件位置的绝对路径. 如果没有这个类的定义,则返回nu

  • Java获取文件的类型和扩展名的实现方法

    Java获取文件的类型和扩展名 实现代码: File file=new File("E:\\aa.jpg"); String fileName=file.getName(); String fileTyle=fileName.substring(fileName.lastIndexOf("."),fileName.length()); System.out.println(fileTyle); 程序运行效果图: 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

  • Java获取文件夹下所有文件名称的方法示例

    本文实例讲述了Java获取文件夹下所有文件名称的方法.分享给大家供大家参考,具体如下: import java.io.File; public class GetFoldFileNames { /** * * @author zdz8207 */ public static void main(String[] args) { getFileName(); } public static void getFileName() { String path = "G:/lxz/20130611&qu

  • 完美解决Java获取文件路径出现乱码的问题

    在Java中有时获取文件路径,获取的路径中存在中文或者是空格的时候,路径出现乱码.这个问题困扰了我好久,用过各种的转码都无济于事.在后来终于解决了,在这里和大家分享一下,其实也就是加一行代码的问题. 我在项目的是使用 String path = this.getClass().getClassLoader().getResource("/").getPath().substring(1); 这样来获得当前类的文件路径的.但是这样得到的是乱码.后来经过跟踪 在this.getClass(

  • java获取文件编码,jsoup获取html纯文本操作

    maven引入获取编码的jar <dependency> <groupId>com.ibm.icu</groupId> <artifactId>icu4j</artifactId> <version>67.1</version> </dependency> 获取文件编码 package com.lovnx.note.util; import com.ibm.icu.text.CharsetDetector; i

  • Java获取当前时间戳案例详解

    获取当前时间戳 //方法 一 System.currentTimeMillis(); //方法 二 Calendar.getInstance().getTimeInMillis(); //方法 三 new Date().getTime(); 获取时间戳三种方法执行效率比较: import java.util.Calendar; import java.util.Date; public class TimeTest { private static long _TEN_THOUSAND=1000

  • java获取文件的inode标识符的方法

    java获取文件的inode标识符,如果文件被删除或者重命名,inode的值会发生变更,因此可以在第一次加载File之后记录inode,后续校验inode的值来判断文件是否被删除.重命名或重新创建等. 方法1 import java.io.File; import java.nio.file.Files; import java.nio.file.attribute.BasicFileAttributeView; import java.nio.file.attribute.BasicFileA

  • Java获取文件的路径及常见问题解决方案

    在java中读取读取文件,经常因为路径的问题找不到,此文用于记录如何定位文件的简单方法. 本基于springboot做的测试,主要是构建工程方便,所用的方法都是JDK中的方法,主要测试有"/"和没有""的问题,以及getResourceAsStream(String string)和getResource(String string)的问题. 1.项目结构 解释一下,主要有两个配置文件,a.properties和b.properties,a.properties方法

随机推荐