posts - 710,  comments - 81,  views - 260万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
复制代码
  1 package com.mytest;
  2  
  3 import java.io.FileInputStream;
  4 import java.io.FileNotFoundException;
  5 import java.io.IOException;
  6 import java.util.HashMap;
  7 import java.util.Iterator;
  8 import java.util.Map;
  9  
 10 public class VerifyFileType {
 11  
 12     public final static Map<String, String> FILE_TYPE_MAP = new HashMap<String, String>();
 13     private static FileInputStream is;
 14     static {
 15         getAllFileType(); // 初始化文件类型信息
 16     }
 17     /**
 18      * 常用文件格式
 19      */
 20     private static void getAllFileType() {
 21         FILE_TYPE_MAP.put("ffd8ffe000104a464946", "jpg"); // JPEG (jpg)
 22         FILE_TYPE_MAP.put("89504e470d0a1a0a0000", "png"); // PNG (png)
 23         FILE_TYPE_MAP.put("47494638396126026f01", "gif"); // GIF (gif)
 24         FILE_TYPE_MAP.put("49492a00227105008037", "tif"); // TIFF (tif)
 25         FILE_TYPE_MAP.put("424d228c010000000000", "bmp"); // 16色位图(bmp)
 26         FILE_TYPE_MAP.put("424d8240090000000000", "bmp"); // 24位位图(bmp)
 27         FILE_TYPE_MAP.put("424d8e1b030000000000", "bmp"); // 256色位图(bmp)
 28         FILE_TYPE_MAP.put("41433130313500000000", "dwg"); // CAD (dwg)
 29         FILE_TYPE_MAP.put("3c21444f435459504520", "html"); // HTML (html)
 30         FILE_TYPE_MAP.put("3c21646f637479706520", "htm"); // HTM (htm)
 31         FILE_TYPE_MAP.put("48544d4c207b0d0a0942", "css"); // css
 32         FILE_TYPE_MAP.put("696b2e71623d696b2e71", "js"); // js
 33         FILE_TYPE_MAP.put("7b5c727466315c616e73", "rtf"); // Rich Text Format (rtf)
 34         FILE_TYPE_MAP.put("38425053000100000000", "psd"); // Photoshop (psd)
 35         FILE_TYPE_MAP.put("46726f6d3a203d3f6762", "eml"); // Email [Outlook Express 6] (eml)
 36         FILE_TYPE_MAP.put("d0cf11e0a1b11ae10000", "doc"); // MS Excel 注意:word、msi 和 excel的文件头一样
 37         FILE_TYPE_MAP.put("d0cf11e0a1b11ae10000", "vsd"); // Visio 绘图
 38         FILE_TYPE_MAP.put("5374616E64617264204A", "mdb"); // MS Access (mdb)
 39         FILE_TYPE_MAP.put("252150532D41646F6265", "ps");
 40         FILE_TYPE_MAP.put("255044462d312e350d0a", "pdf"); // Adobe Acrobat (pdf)
 41         FILE_TYPE_MAP.put("2e524d46000000120001", "rmvb"); // rmvb/rm相同
 42         FILE_TYPE_MAP.put("464c5601050000000900", "flv"); // flv与f4v相同
 43         FILE_TYPE_MAP.put("00000020667479706d70", "mp4");
 44         FILE_TYPE_MAP.put("49443303000000002176", "mp3");
 45         FILE_TYPE_MAP.put("000001ba210001000180", "mpg"); //
 46         FILE_TYPE_MAP.put("3026b2758e66cf11a6d9", "wmv"); // wmv与asf相同
 47         FILE_TYPE_MAP.put("52494646e27807005741", "wav"); // Wave (wav)
 48         FILE_TYPE_MAP.put("52494646d07d60074156", "avi");
 49         FILE_TYPE_MAP.put("4d546864000000060001", "mid"); // MIDI (mid)
 50         FILE_TYPE_MAP.put("504b0304140000000800", "zip");
 51         FILE_TYPE_MAP.put("526172211a0700cf9073", "rar");
 52         FILE_TYPE_MAP.put("235468697320636f6e66", "ini");
 53         FILE_TYPE_MAP.put("504b03040a0000000000", "jar");
 54         FILE_TYPE_MAP.put("4d5a9000030000000400", "exe");// 可执行文件
 55         FILE_TYPE_MAP.put("3c25402070616765206c", "jsp");// jsp文件
 56         FILE_TYPE_MAP.put("4d616e69666573742d56", "mf");// MF文件
 57         FILE_TYPE_MAP.put("3c3f786d6c2076657273", "xml");// xml文件
 58         FILE_TYPE_MAP.put("494e5345525420494e54", "sql");// xml文件
 59         FILE_TYPE_MAP.put("7061636b616765207765", "java");// java文件
 60         FILE_TYPE_MAP.put("406563686f206f66660d", "bat");// bat文件
 61         FILE_TYPE_MAP.put("1f8b0800000000000000", "gz");// gz文件
 62         FILE_TYPE_MAP.put("6c6f67346a2e726f6f74", "properties");// bat文件
 63         FILE_TYPE_MAP.put("cafebabe0000002e0041", "class");// bat文件
 64         FILE_TYPE_MAP.put("49545346030000006000", "chm");// bat文件
 65         FILE_TYPE_MAP.put("04000000010000001300", "mxp");// bat文件
 66         FILE_TYPE_MAP.put("504b0304140006000800", "docx");// docx文件
 67         FILE_TYPE_MAP.put("d0cf11e0a1b11ae10000", "wps");// WPS文字wps、表格et、演示dps都是一样的
 68         FILE_TYPE_MAP.put("6431303a637265617465", "torrent");
 69  
 70         FILE_TYPE_MAP.put("6D6F6F76", "mov"); // Quicktime (mov)
 71         FILE_TYPE_MAP.put("FF575043", "wpd"); // WordPerfect (wpd)
 72         FILE_TYPE_MAP.put("CFAD12FEC5FD746F", "dbx"); // Outlook Express (dbx)
 73         FILE_TYPE_MAP.put("2142444E", "pst"); // Outlook (pst)
 74         FILE_TYPE_MAP.put("AC9EBD8F", "qdf"); // Quicken (qdf)
 75         FILE_TYPE_MAP.put("E3828596", "pwl"); // Windows Password (pwl)
 76         FILE_TYPE_MAP.put("2E7261FD", "ram"); // Real Audio (ram)
 77         FILE_TYPE_MAP.put("null", null); // null
 78     }
 79  
 80     /**
 81      * 得到上传文件的文件头
 82      * 
 83      * @param src
 84      * @return
 85      */
 86     public static String bytesToHexString(byte[] src) {
 87         StringBuilder stringBuilder = new StringBuilder();
 88         if (src == null || src.length <= 0) {
 89             return null;
 90         }
 91         for (int i = 0; i < src.length; i++) {
 92             int v = src[i] & 0xFF;
 93             String hv = Integer.toHexString(v);
 94             if (hv.length() < 2) {
 95                 stringBuilder.append(0);
 96             }
 97             stringBuilder.append(hv);
 98         }
 99         return stringBuilder.toString();
100     }
101     /**
102      * 根据制定文件的文件头判断其文件类型
103      * 
104      * @param filePaht
105      * @return
106      */
107     public static String getFileType(String filePaht) {
108         String res = null;
109         try {
110             is = new FileInputStream(filePaht);
111             byte[] b = new byte[10];
112             is.read(b, 0, b.length);
113             String fileCode = bytesToHexString(b);
114  
115             Iterator<String> keyIter = FILE_TYPE_MAP.keySet().iterator();
116             while (keyIter.hasNext()) {
117                 String key = keyIter.next();
118                 // 验证前5个字符比较
119                 if (key.toLowerCase().startsWith(fileCode.toLowerCase().substring(0, 5))
120                         || fileCode.toLowerCase().substring(0, 5).startsWith(key.toLowerCase())) {
121                     res = FILE_TYPE_MAP.get(key);
122                     break;
123                 }
124             }
125         } catch (FileNotFoundException e) {
126             e.printStackTrace();
127         } catch (IOException e) {
128             e.printStackTrace();
129         }
130         return res;
131     }
132  
133     public static void main(String[] args) throws Exception {
134         String type = getFileType("E:\\20170615163016.png");
135         System.out.println("Except : " + type);
136         System.out.println();
137     }
138 }
复制代码

 

posted on   itprobie-菜鸟程序员  阅读(1382)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2018-09-25 ROW_NUMBER() OVER()函数用法;(分组,排序),partition by
2018-09-25 SQL Server 2008中的CTE递归查询得到一棵树
2018-09-25 oracle 数据库密码过期
2013-09-25 win2003上传文件限制
2012-09-25 可空类型的处理
2012-09-25 字符串扩展方法
2012-09-25 如何从页面中获取url参数
点击右上角即可分享
微信分享提示