package cn.edu.hactcm.cfcms.utils;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;

/**
 * author :

CFMS :Computer files management system
 * version :1.0 2013-3-1 下午10:21:32
 */
public class CheckFileType {
 // 缓存文件头信息-文件头信息
 public static final HashMap<String, String> mFileTypes = new HashMap<String, String>();
 static {
  // images
  mFileTypes.put("FFD8FF", "jpg");
  mFileTypes.put("89504E47", "png");
  mFileTypes.put("47494638", "gif");
  mFileTypes.put("49492A00", "tif");
  mFileTypes.put("424D", "bmp");
  //
  mFileTypes.put("41433130", "dwg"); // CAD
  mFileTypes.put("38425053", "psd");
  mFileTypes.put("7B5C727466", "rtf"); // 日记本
  mFileTypes.put("3C3F786D6C", "xml");
  mFileTypes.put("68746D6C3E", "html");
  mFileTypes.put("44656C69766572792D646174653A", "eml"); // 邮件
  mFileTypes.put("CFAD12FEC5FD746F", "dbx");
  mFileTypes.put("2142444E", "pst");
  mFileTypes.put("D0CF11E0", "doc");
  mFileTypes.put("5374616E64617264204A", "mdb");
  mFileTypes.put("FF575043", "wpd");
  mFileTypes.put("252150532D41646F6265", "ps");
  mFileTypes.put("255044462D312E", "pdf");
  mFileTypes.put("E3828596", "pwl");
  mFileTypes.put("AC9EBD8F", "qdf");
  mFileTypes.put("504B0304", "docx");
  mFileTypes.put("52617221", "rar");
  mFileTypes.put("57415645", "wav");
  mFileTypes.put("41564920", "avi");
  mFileTypes.put("2E7261FD", "ram");
  mFileTypes.put("2E524D46", "rm");
  mFileTypes.put("000001BA", "mpg");
  mFileTypes.put("000001B3", "mpg");
  mFileTypes.put("6D6F6F76", "mov");
  mFileTypes.put("3026B2758E66CF11", "asf");
  mFileTypes.put("4D546864", "mid");
  mFileTypes.put("1F8B08", "gz");
  mFileTypes.put("", "");
  mFileTypes.put("", "");
 }
 
 /**
  * 根据文件路劲获取文件头信息
  * @param filePath :文件路径
  * @return         : 文件头信息
  */
 public static String getFileType(String filePath) {
  return mFileTypes.get(getFileHeader(filePath));
 }
 
 /**
  * 根据文件路径获取文件头信息
  * @param filePath  :文件路径
  * @return          :文件头信息
  */
 public static String getFileHeader(String filePath){
  FileInputStream is = null;
  String value = null;
  try {
   is = new FileInputStream(filePath);
   byte[] b = new byte[4];
   is.read(b,0,b.length);
   value = bytesToHexString(b);
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (null != is) {
    try {
     is.close();
    } catch (IOException e2) {
    }
   }
  }
  return value;
 }
 
 /**
  * 将要读取文件信息的文件的byte数组转换成string类型表示
  * @param src :ya
  * @return
  */
 private static String bytesToHexString(byte[] src) {
  StringBuilder builder = new StringBuilder();
  if (src == null || src.length <= 0) {
   return null;
  }
  String hv;
  for (int i = 0; i < src.length; i++) {
   // 以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式,并转换为大写
   hv = Integer.toHexString(src[i] & 0xFF).toUpperCase();
   if (hv.length() < 2) {
    builder.append(0);
   }
   builder.append(hv);
  }
  return builder.toString();
 }

public static void main(String[] args) {
  final String fileType = getFileType("D:\\test\\701.xls");
  System.out.println(fileType);
 }
}

通过16进制文件头判断文件类型相关推荐

  1. python如何区分文件类型_python通过文件头判断文件类型

    对于提供上传的服务器,需要对上传的文件进行过滤. 本文为大家提供了python通过文件头判断文件类型的方法,避免不必要的麻烦. 分享代码如下 import struct # 支持文件类型 # 用16进 ...

  2. php读取某类型文件代码,php代码实现读取文件头判断文件类型

    php代码实现读取文件头判断文件类型,支持图片.rar.exe等后缀. 案例: //为图片的路径可以用d:/upload/11.jpg等绝对路径 $file = fopen($filename, &q ...

  3. 16进制文件头笔记及文件类型判断代码

    之前做过一个功能,说是上传文件到服务器,但是所有文件excel.word.音乐.视频等都上传到一个文件夹,不利于查找,于是自己上网查询关于这方面的资料,决定按文件后缀名,给文件进行分类,存放不同的文件 ...

  4. 利用文件头判断文件类型

    上传文件时经常需要做文件类型判断,例如图片.文档等,普通做法是直接判断文件后缀名,而文艺青年为了防止各种攻击同时也会加上使用文件头信息判断文件类型. 原理很简单:用文件头判断,直接读取文件的前2个字节 ...

  5. 常见的16进制文件头

    PNG (png),文件头:89504E47 JPEG (jpg),文件头:FFD8FF GIF (gif),文件头:47494638 ZIP Archive (zip),文件头:504B0304 R ...

  6. 根据文件头判断文件类型

    10个字节判断 [java] view plaincopy private static final HashMap<String, String> mFileTypes = new Ha ...

  7. java文件头_Java根据文件头判断文件类型

    public class FileType { private final static Map FILE_TYPE_MAP = new HashMap(); private FileType(){} ...

  8. python 通过文件头获取文件类型mimetype

    一.MIME Type是什么? 资源的媒体类型 MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型.是设定某种扩展名的文件用一种应用程序打开 ...

  9. 根据文件头判断文件真实类型,让更改后缀的文件无所遁形!

    MultipartFile转为File package cn.com.ebidding.web.file.util; import org.springframework.web.multipart. ...

最新文章

  1. FAST-LIO2:快速直接的激光雷达与惯导里程计
  2. 50k大牛告诉你Python怎么学,10个特性带你快速了解python
  3. 第二十三周微职位elk日志系统
  4. 学好SQL--MySQL简单使用(3)
  5. 关于微信红包的架构思考
  6. 投票选举c语言程序,C语言元旦礼物:经典入门问题分析——选举投票
  7. 0-1背包问题(C语言)
  8. java泛型特点_java泛型简单总结
  9. 做柜员还是程序员_未来的程序员,还是“高薪一族”吗?
  10. Linux日志终极指南
  11. Labelme标注软件下载安装教程
  12. Wasserstein距离
  13. Web页面切图和CSS注意事项
  14. RealSR性能大幅提升,旷视科技+快手科技+电子科大联合提出“先发散再收敛”的D2CSR
  15. 职高c语言,C语言职高班教学计划
  16. 冰蝎软件的配置与应用
  17. 华硕ASUS手机平板官方刷机包raw格式解压修改工具
  18. 自考知识电脑图计算机组成原理,自考“计算机组成原理”考试大纲
  19. html ie标题居中,HTML电子邮件呈现在IE中居中的文本
  20. 开启xmp1还是2_命运2资料片“凌光之刻”steam上线

热门文章

  1. boost::mp11::mp_max_element相关用法的测试程序
  2. boost::log模块实现loging到 syslog 服务器的示例
  3. boost::fusion::cons用法的测试程序
  4. boost::callable_traits是否为is_volatile_member的测试程序
  5. ITK:在灰度图像中标记连接的组件
  6. VTK:可视化之QuadricLODActor
  7. VTK:可视化之FlatShading
  8. VTK:相互作用之TrackballCamera
  9. VTK:InfoVis之WordCloudDemo
  10. VTK:图片之ImageToStructuredPoints