通过文件t殴获取文件的类型    转载自https://blog.csdn.net/kevin8290/article/details/72643619

public class FileTypeUtil {
 
    private final static Map<String, String> FILE_TYPE_MAP = new HashMap<String, String>();  
    private static Logger log = LoggerFactory.getLogger(FileTypeUtil.class);
    private FileTypeUtil(){}  
      
    static{  
        getAllFileType();  //初始化文件类型信息  
    }  
          
    private static void getAllFileType(){  
        FILE_TYPE_MAP.put("ffd8ffe000104a464946", "jpg"); //JPEG (jpg)     
        FILE_TYPE_MAP.put("89504e470d0a1a0a0000", "png"); //PNG (png)     
        FILE_TYPE_MAP.put("47494638396126026f01", "gif"); //GIF (gif)     
        FILE_TYPE_MAP.put("49492a00227105008037", "tif"); //TIFF (tif)     
        FILE_TYPE_MAP.put("424d228c010000000000", "bmp"); //16色位图(bmp)     
        FILE_TYPE_MAP.put("424d8240090000000000", "bmp"); //24位位图(bmp)     
        FILE_TYPE_MAP.put("424d8e1b030000000000", "bmp"); //256色位图(bmp)     
        FILE_TYPE_MAP.put("41433130313500000000", "dwg"); //CAD (dwg)     
        FILE_TYPE_MAP.put("3c21444f435459504520", "html"); //HTML (html)
        FILE_TYPE_MAP.put("3c21646f637479706520", "htm"); //HTM (htm)
        FILE_TYPE_MAP.put("48544d4c207b0d0a0942", "css"); //css
        FILE_TYPE_MAP.put("696b2e71623d696b2e71", "js"); //js
        FILE_TYPE_MAP.put("7b5c727466315c616e73", "rtf"); //Rich Text Format (rtf)     
        FILE_TYPE_MAP.put("38425053000100000000", "psd"); //Photoshop (psd)     
        FILE_TYPE_MAP.put("46726f6d3a203d3f6762", "eml"); //Email [Outlook Express 6] (eml)       
        FILE_TYPE_MAP.put("d0cf11e0a1b11ae10000", "doc"); //MS Excel 注意:word、msi 和 excel的文件头一样     
        FILE_TYPE_MAP.put("d0cf11e0a1b11ae10000", "vsd"); //Visio 绘图     
        FILE_TYPE_MAP.put("5374616E64617264204A", "mdb"); //MS Access (mdb)      
        FILE_TYPE_MAP.put("252150532D41646F6265", "ps");     
        FILE_TYPE_MAP.put("255044462d312e360d25", "pdf"); //Adobe Acrobat (pdf)   
        FILE_TYPE_MAP.put("2e524d46000000120001", "rmvb"); //rmvb/rm相同  
        FILE_TYPE_MAP.put("464c5601050000000900", "flv"); //flv与f4v相同  
        FILE_TYPE_MAP.put("00000020667479706973", "mp4"); 
        FILE_TYPE_MAP.put("49443303000000000f76", "mp3"); 
        FILE_TYPE_MAP.put("000001ba210001000180", "mpg"); //     
        FILE_TYPE_MAP.put("3026b2758e66cf11a6d9", "wmv"); //wmv与asf相同    
        FILE_TYPE_MAP.put("524946464694c9015741", "wav"); //Wave (wav)  
        FILE_TYPE_MAP.put("52494646d07d60074156", "avi");  
        FILE_TYPE_MAP.put("4d546864000000060001", "mid"); //MIDI (mid)   
        FILE_TYPE_MAP.put("504b0304140000000800", "zip");    
        FILE_TYPE_MAP.put("526172211a0700cf9073", "rar");   
        FILE_TYPE_MAP.put("235468697320636f6e66", "ini");   
        FILE_TYPE_MAP.put("504b03040a0000000000", "jar"); 
        FILE_TYPE_MAP.put("4d5a9000030000000400", "exe");//可执行文件
        FILE_TYPE_MAP.put("3c25402070616765206c", "jsp");//jsp文件
        FILE_TYPE_MAP.put("4d616e69666573742d56", "mf");//MF文件
        FILE_TYPE_MAP.put("3c3f786d6c2076657273", "xml");//xml文件
        FILE_TYPE_MAP.put("efbbbf2f2a0d0a53514c", "sql");//xml文件
        FILE_TYPE_MAP.put("7061636b616765207765", "java");//java文件
        FILE_TYPE_MAP.put("406563686f206f66660d", "bat");//bat文件
        FILE_TYPE_MAP.put("1f8b0800000000000000", "gz");//gz文件
        FILE_TYPE_MAP.put("6c6f67346a2e726f6f74", "properties");//bat文件
        FILE_TYPE_MAP.put("cafebabe0000002e0041", "class");//bat文件
        FILE_TYPE_MAP.put("49545346030000006000", "chm");//bat文件
        FILE_TYPE_MAP.put("04000000010000001300", "mxp");//bat文件
        FILE_TYPE_MAP.put("504b0304140006000800", "docx");//docx文件
        FILE_TYPE_MAP.put("d0cf11e0a1b11ae10000", "wps");//WPS文字wps、表格et、演示dps都是一样的
        FILE_TYPE_MAP.put("6431303a637265617465", "torrent");
        FILE_TYPE_MAP.put("494d4b48010100000200", "264");
        
          
        FILE_TYPE_MAP.put("6D6F6F76", "mov"); //Quicktime (mov)  
        FILE_TYPE_MAP.put("FF575043", "wpd"); //WordPerfect (wpd)   
        FILE_TYPE_MAP.put("CFAD12FEC5FD746F", "dbx"); //Outlook Express (dbx)     
        FILE_TYPE_MAP.put("2142444E", "pst"); //Outlook (pst)      
        FILE_TYPE_MAP.put("AC9EBD8F", "qdf"); //Quicken (qdf)     
        FILE_TYPE_MAP.put("E3828596", "pwl"); //Windows Password (pwl)         
        FILE_TYPE_MAP.put("2E7261FD", "ram"); //Real Audio (ram) 
    }  
  
    /**  
     * 得到上传文件的文件头  
     * @param src  
     * @return  
     */    
    private static String bytesToHexString(byte[] src){    
        StringBuilder stringBuilder = new StringBuilder();    
        if(null==src || src.length <= 0){    
            return null;    
        }  
        for(int i = 0; i < src.length; i++){    
            int v = src[i] & 0xFF;    
            String hv = Integer.toHexString(v);    
            if(hv.length() < 2){    
                stringBuilder.append(0);    
            }    
            stringBuilder.append(hv);    
        }    
        return stringBuilder.toString();  
    }    
      
    /** 
     * 获取文件类型 
     * @param file 
     * @return 
     */  
    public static String getFileType(File file){  
        String res = null;
        FileInputStream fis = null;
        try{  
            fis = new FileInputStream(file);
            //获取文件头的前六位
            byte[] b = new byte[3];  
            fis.read(b, 0, b.length);  
            String fileCode = bytesToHexString(b); 
            Iterator<String> keyIter = FILE_TYPE_MAP.keySet().iterator();  
            while(keyIter.hasNext()){  
                String key = keyIter.next();        
                 //比较前几位是否相同就可以判断文件格式(相同格式文件文件头后面几位会有所变化)
                if(key.toLowerCase().startsWith(fileCode.toLowerCase()) || fileCode.toLowerCase().startsWith(key.toLowerCase())){  
                    res = FILE_TYPE_MAP.get(key);  
                    break;  
                }  
            }
            log.info("文件头:"+fileCode+"-----文件类型:"+res);
            fis.close();
        }catch(FileNotFoundException e){
            e.printStackTrace();    
        }catch (IOException e){  
            e.printStackTrace();    
        }finally {
            try {
                fis.close();
            }catch (IOException e) {
                e.printStackTrace();
            }
        }    
        return res;  
    }
    
}

原文链接:https://blog.csdn.net/kevin8290/article/details/72643619

java 获取文件头中的文件类型相关推荐

  1. 根据文件头信息来判断文件类型

    常用的判断文件类型的方法 有 根据文件类型,文件后缀,这里有一种方法,根据文件头信息来判断文件类型. 我把多余的getAllFileType()  给注释掉了,可以根据使用来选择. 这个参考了,忘了地 ...

  2. java获取jar包中的文件资源

    java获取jar包中的文件资源 一.问题示例 1.1 项目开发时 1.2 打包成jar后 二.解决方案 2.1 解决方法 2.2 实现 问题描述:   我们常常在代码中读取一些资源文件(比如图片,音 ...

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

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

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

    简介 我们都知道,文件的扩展名是用来识别文件类型的.通过给他指定扩展名,我们可以告诉自己,也告诉操作系统我们想用什么方式打开这个文件.比如我么会把.jpg的文件默认用图片显示软件打开,.zip 文件会 ...

  5. java:根据文件头来判断文件类型

    根据文件后缀来判断文件类型,往往是不靠谱的,因为要考虑到,可能人为的更改文件后缀,导致一些问题. 因此,下面是详细的根据文件头信息来判断文件类型. 文件头的十六进制以后继续补充. package co ...

  6. Java:通过读取文件头来得到文件真实类型

    誊抄自原来的笔记 背景 有时我们需要对上传的文件进行判断文件类型,一般我们可以通过扩展名来判断文件属于什么类型,但是当文件没有扩展名或者一张图片改成了txt,我们通过扩展名的方式来判断是不是就不太合适 ...

  7. java判断文件头_java通过文件头来判断文件类型

    importjava.io.FileInputStream;importjava.io.IOException;importjava.util.HashMap;importjava.util.Map. ...

  8. java file 获取文件类型_Android中Java根据文件头获取文件类型

    前面贴过Android系统内部的MediaFile类来获取文件类型的办法,这个类主要是根据文件的扩展名来判断,其准确性不是很好.具体可查看Android系统使用MediaFile类判断音频文件类型.其 ...

  9. java获取url文件格式_本地文件/url获取文件类型

    package com.cjw.baidu.ocr; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringU ...

最新文章

  1. Leetcode 116. 填充每个节点的下一个右侧节点指针 解题思路及C++实现
  2. Swift和Objective-C混编注意事项
  3. 交互式图表_如何构建罗马数字转换器和交互式罗马数字图表
  4. 【图灵杯 E也即POJ 3368】简单的RMQ
  5. pyqt5 列表内添加按钮
  6. linux环境下编译llvm源码
  7. JS中5秒中跳转到其他页面
  8. 【转】腾讯云-解决Winscp permission denied的问题
  9. 正则表达式相关:C# RichTextBox显示html文本内容
  10. 小米3g刷高格固件_小米路由器3G版padavan老毛子原版固件
  11. Spss乱码问题的解决方法
  12. mac 壁纸 android,Mac系统风格桌面
  13. 利用ESP8266与米思齐从零制作模拟温室大棚--硬件篇
  14. python 将微信聊天记录生成词云
  15. Python分析双色球,中大奖指日可待
  16. office2010 word 关闭很慢
  17. 路透社:韩国游戏巨头Nexon欲出售控股权 腾讯将扮演关键角色
  18. mysql .zip 包简易安装
  19. Axure 中继器表格背景颜色交替不成功
  20. Android混淆、反编译基础教程

热门文章

  1. Android性能优化之启动加速
  2. 安装Altium Designer失败
  3. matlab进行fft仿真,基于fft算法的MATLAB仿真
  4. 隆化的大米排之首 国稻种芯·中国水稻节:河北承德十大特产
  5. ISIS原理及实验总结
  6. 能源管理系统与能源管理平台|瑜岿科技
  7. 2015年江苏对口单招计算机试卷答案,2015年江苏对口单招计算机试卷
  8. WPS Word 如图1 (题注与交叉引用)
  9. 课程更新:通信原理——第六章
  10. springBoot之 Redis 实例