常见文件类型识别

根据文件的后缀名识别文件类型并不准确,可以使用文件的头信息进行识别:  
以下是各类文件的头:  
JPEG (jpg),文件头:FFD8FFE1  
PNG (png),文件头:89504E47  
GIF (gif),文件头:47494638  
TIFF (tif),文件头:49492A00  
Windows Bitmap (bmp),文件头:424D  
CAD (dwg),文件头:41433130  
Adobe Photoshop (psd),文件头:38425053  
Rich Text Format (rtf),文件头:7B5C727466  
XML (xml),文件头:3C3F786D6C  
HTML (html),文件头:68746D6C3E  
Email [thorough only] (eml),文件头:44656C69766572792D646174653A  
Outlook Express (dbx),文件头:CFAD12FEC5FD746F  
Outlook (pst),文件头:2142444E  
MS Word/Excel (xls.or.doc),文件头:D0CF11E0  
MS Access (mdb),文件头:5374616E64617264204A  
WordPerfect (wpd),文件头:FF575043  
Postscript (eps.or.ps),文件头:252150532D41646F6265  
Adobe Acrobat (pdf),文件头:255044462D312E  
Quicken (qdf),文件头:AC9EBD8F  
Windows Password (pwl),文件头:E3828596  
ZIP Archive (zip),文件头:504B0304  
RAR Archive (rar),文件头:52617221  
Wave (wav),文件头:57415645  
AVI (avi),文件头:41564920  
Real Audio (ram),文件头:2E7261FD  
Real Media (rm),文件头:2E524D46  
MPEG (mpg),文件头:000001BA  
MPEG (mpg),文件头:000001B3  
Quicktime (mov),文件头:6D6F6F76  
Windows Media (asf),文件头:3026B2758E66CF11  
MIDI (mid),文件头:4D546864  
检测文件类型的代码如下:  
Java代码     收藏代码
  1. import  java.io.File;  
  2. import  java.io.FileInputStream;  
  3. import  java.io.IOException;  
  4. import  java.util.HashMap;  
  5. import  java.util.Map;  
  6.   
  7. public   class  FileTypeDetector {  
  8.     private   static  Map<String,String> head2FileType =  new  HashMap<String,String>();  
  9.     static {  
  10.         head2FileType.put("FFD8FFE1" "jpg" );  
  11.         head2FileType.put("89504E47" "png" );  
  12.         head2FileType.put("47494638 " "gif" );  
  13.         head2FileType.put("49492A00" "tif" );  
  14.         head2FileType.put("424D" "bmp" );  
  15.         head2FileType.put("41433130" "dwg" );  
  16.         head2FileType.put("38425053 " "psd" );  
  17.         head2FileType.put("7B5C727466" "rtf" );  
  18.         head2FileType.put("3C3F786D6C" "xml" );  
  19.         head2FileType.put("68746D6C3E " "html" );  
  20.         head2FileType.put("44656C69766572792D646174" "eml" );  
  21.         head2FileType.put("CFAD12FEC5FD746F " "dbx" );  
  22.         head2FileType.put("2142444E" "pst" );  
  23.         head2FileType.put("D0CF11E0" "xls/doc" );  
  24.         head2FileType.put("5374616E64617264204A" "mdb" );  
  25.         head2FileType.put("FF575043" "wpd" );  
  26.         head2FileType.put("252150532D41646F6265" "eps/ps" );  
  27.         head2FileType.put("255044462D312E" "pdf" );  
  28.         head2FileType.put("E3828596" "pwl" );  
  29.         head2FileType.put("504B0304" "zip" );  
  30.         head2FileType.put("52617221" "rar" );  
  31.         head2FileType.put("57415645" "wav" );  
  32.         head2FileType.put("41564920" "avi" );  
  33.         head2FileType.put("2E7261FD" "ram" );  
  34.         head2FileType.put("2E524D46" "rm" );  
  35.         head2FileType.put("000001BA" "mpg" );  
  36.         head2FileType.put("000001B3" "mpg" );  
  37.         head2FileType.put("6D6F6F76" "mov" );  
  38.         head2FileType.put("3026B2758E66CF11" "asf" );  
  39.         head2FileType.put("4D546864" "mid" );  
  40.     }  
  41.       
  42.     private   static  String bytesToHexString(String fileName)  throws  IOException{  
  43.         FileInputStream fis = null ;  
  44.         StringBuilder stringBuilder = new  StringBuilder();  
  45.         try {  
  46.             fis = new  FileInputStream( new  File(fileName));  
  47.             byte [] b =  new   byte [ 4 ];  
  48.             fis.read(b, 0 , b.length);  
  49.   
  50.             for  ( int  i =  0 ; i < b.length; i++) {  
  51.                 int  v = b[i] &  0xFF ;  
  52.                 String hv = Integer.toHexString(v);  
  53.                 if  (hv.length() <  2 ) {  
  54.                     stringBuilder.append(0 );  
  55.                 }  
  56.                 stringBuilder.append(hv);  
  57.             }  
  58.         }finally {  
  59.             if (fis !=  null )  
  60.                 fis.close();  
  61.         }  
  62.         return  stringBuilder.toString().toUpperCase();  
  63.     }  
  64.       
  65.     public   static  String fileType(String fileName)  throws  IOException{  
  66.         String head = bytesToHexString(fileName);  
  67.         return  head2FileType.get(head);  
  68.     }  
  69.       
  70.     public   static   void  main(String[] args)  throws  IOException {  
  71.         System.out.println(fileType("d://aaa.png" ));  
  72.     }  
  73. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值