`
mzhj
  • 浏览: 224041 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java通过文件头内容判断文件类型

    博客分类:
  • J2SE
阅读更多
/**
  * byte数组转换成16进制字符串
  * @param src
  * @return
  */
public static String bytesToHexString(byte[] src){    
        StringBuilder stringBuilder = new StringBuilder();    
        if (src == null || 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 is
  * @return
  */
public static String getTypeByStream(FileInputStream is){
     byte[] b = new byte[4]; 
        try {
   is.read(b, 0, b.length);
  } catch (IOException e) {
   e.printStackTrace();
  }
        String type = bytesToHexString(b).toUpperCase();
        if(type.contains("FFD8FF")){
         return "jpg";
        }else if(type.contains("89504E47")){
         return "png";
        }else if(type.contains("47494638")){
         return "gif";
        }else if(type.contains("49492A00")){
         return "tif";
        }else if(type.contains("424D")){
         return "bmp";
        }
        return type;
    }

public static void main(String[] args) throws Exception {
//     String src = "D:/workspace//8129.jpg";
//     String src = "D:/workspace//temp/1.gif";
     String src = "D:/workspace//temp/2.bmp";
     FileInputStream is = new FileInputStream(src); 
//        byte[] b = new byte[4]; 
//        is.read(b, 0, b.length); 
//        System.out.println(bytesToHexString(b));
      
        String type = getTypeByStream(is);
        System.out.println(type);
  /*
   * JPEG (jpg),文件头:FFD8FF
PNG (png),文件头:89504E47
GIF (gif),文件头:47494638
TIFF (tif),文件头:49492A00
Windows Bitmap (bmp),文件头:424D

   */
    } 

==================================

用文件头判断。直接读取文件的前几个字节。
常用文件的文件头如下:
JPEG (jpg),文件头:FFD8FF
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


GRAPHICS FILESAdobe Photoshop File (.psd)
00000000  38 42 50 53 00 01 00 00  00 00 00 00 00 04 00 00  |8BPS............|
00000010  0b 71 00 00 10 dd 00 08  00 03 00 00 00 00 00 00  |.q...?..........|
00000020  6f c4 38 42 49 4d 04 04  00 00 00 00 00 07 1c 02  |o?8BIM..........|

JPEG image (.jpg)
00000000  ff d8 ff e0 00 10 4a 46  49 46 00 01 01 01 00 48  |????..JFIF.....H|
00000010  00 48 00 00 ff db 00 43  00 06 04 05 06 05 04 06  |.H..??.C........|
00000020  06 05 06 07 07 06 08 0a  10 0a 0a 09 09 0a 14 0e  |................|

PNG image (.png)
00000000  89 50 4e 47 0d 0a 1a 0a  00 00 00 0d 49 48 44 52  |.PNG........IHDR|
00000010  00 00 03 20 00 00 02 58  08 06 00 00 00 9a 76 82  |... ...X......v.|
00000020  70 00 00 0c d9 69 43 43  50 69 63 63 00 00 78 da  |p...?iCCPicc..x?|

GIF image (.gif)
00000000  47 49 46 38 39 61 10 00  10 00 b3 0d 00 3f 3f 3f  |GIF89a....?..???|
00000010  bf bf bf 2a 2a 2a 55 55  55 7f 7f 7f 15 15 15 40  |???***UUU......@|
00000020  40 40 60 60 60 c0 c0 c0  2f 2f 2f 90 90 90 ff ff  |@@```???///...??|

Adobe Illustrator File (.ai)
00000000  25 50 44 46 2d 31 2e 34  0d 25 e2 e3 cf d3 0d 0a  |%PDF-1.4.%????..|
00000010  31 20 30 20 6f 62 6a 3c  3c 2f 50 61 67 65 73 20  |1 0 obj<</Pages |
00000020  32 20 30 20 52 2f 54 79  70 65 2f 43 61 74 61 6c  |2 0 R/Type/Catal|MUSIC FILESMP3 Music Track (.mp3)
00000000  49 44 33 03 00 00 00 00  00 6f 54 49 54 32 00 00  |ID3......oTIT2..|
00000010  00 0e 00 00 00 54 68 65  20 4f 74 68 65 72 20 4d  |.....The Other M|
00000020  61 6e 54 52 43 4b 00 00  00 02 00 00 00 33 54 50  |anTRCK.......3TP|

WAV file (.wav)
00000000  52 49 46 46 62 b7 01 00  57 41 56 45 66 6d 74 20  |RIFFb?..WAVEfmt|
00000010  10 00 00 00 01 00 01 00  44 ac 00 00 88 58 01 00  |........D?...X..|
00000020  02 00 10 00 64 61 74 61  3e b7 01 00 57 01 bd 01  |....data>?..W.?.|

AIFF file (.aif)
00000000  46 4f 52 4d 00 2a ef cc  41 49 46 46 43 4f 4d 54  |FORM.*??AIFFCOMT|
00000010  00 00 01 c2 00 01 00 00  00 00 00 00 00 12 43 72  |...?..........Cr|
00000020  65 61 74 6f 72 3a 20 4c  6f 67 69 63 20 50 72 6f  |eator: Logic Pro|TEXT FILESText file (often .txt, but not always)
00000000  48 69 20 65 76 65 72 79  6f 6e 65 2c 0a 0a 48 65  |Hi everyone,..He|
00000010  72 65 20 61 72 65 20 73  6f 6d 65 20 63 68 61 6e  |re are some chan|
00000020  67 65 73 20 74 68 61 74  20 77 69 6c 6c 20 68 61  |ges that will ha|

Microsoft Word/Office (.doc, .xls)
00000000d0 cf 11 e0 a1 b1 1a e100 00 00 00 00 00 00 00  |??.....?........|
00000010  00 00 00 00 00 00 00 00  3e 00 03 00 fe ff 09 00  |........>...??..|
00000020  06 00 00 00 00 00 00 00  00 00 00 00 01 00 00 00  |................|

Adobe PDF (.pdf) - Very similar to Adobe Illustrator and other Postscript. formats
00000000  25 50 44 46 2d 31 2e 34  0d 25 e2 e3 cf d3 0d 0a  |%PDF-1.4.%????..|
00000010  36 20 30 20 6f 62 6a 20  3c 3c 2f 4c 69 6e 65 61  |6 0 obj <</Linea|
00000020  72 69 7a 65 64 20 31 2f  4c 20 34 34 30 36 38 2f  |rized 1/L 44068/|ANIMATION & VIDEOFlash movie (.swf)
00000000  43 57 53 08 ac 43 00 00  78 9c ed 7a 77 58 93 c9  |CWS.?C..x.?zwX.?|
00000010  d6 f8 49 25 f4 80 94 50  0d 45 4a 00 e9 45 b0 04  |??I%?..P.EJ.?E?.|
00000020  44 44 45 e9 55 d0 80 44  01 11 10 11 01 75 0d bd  |DDE?U?.D.....u.?|

Quicktime Movie (.mov)
00000000  00 00 00 20 66 74 79 70  71 74 20 20 20 05 03 00  |... ftypqt   ...|
00000010  71 74 20 20 00 00 00 00  00 00 00 00 00 00 00 00  |qt............|
00000020  00 00 03 55 6d 6f 6f 76  00 00 00 6c 6d 76 68 64  |...Umoov...lmvhd|
分享到:
评论
1 楼 一个人de我们 2013-02-04  
[/b][b][i][/i][u][/u]
引用
[img][/img][url][/url][flash=200,200][/flash]

相关推荐

    java实现上传文件类型检测过程解析

    主要介绍了java实现上传文件类型检测过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Android中Java根据文件头获取文件类型的方法

    本文实例讲述了Android中Java根据文件头获取文件类型的方法。分享给大家供大家参考,具体如下: 前面讲过Android系统内部的MediaFile类来获取文件类型的办法,这个类主要是根据文件的扩展名来判断,其准确性不是很好...

    java获取文件编码(判断有无BOM)

    利用chardet,cpdetector包获取文件格式,并判断文件类型是否带BOM

    Java实现的获取和判断文件头信息工具类用法示例

    主要介绍了Java实现的获取和判断文件头信息工具类,结合实例形式分析了Java针对文件读取及头信息判断相关操作技巧,需要的朋友可以参考下

    SpringBoot文件上传控制及Java 获取和判断文件头信息

    主要介绍了SpringBoot文件上传控制的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

    文件类型判断java

    从服务器上下载文件,遇到文件后缀名和文件编码不匹配的状况,找了一些方法通过读取文件流的头二十个字节判断文件真实的类型

    Java判断上传图片格式的实例代码

    主要介绍了Java判断上传图片格式的实例代码,在文中给大家提到了Java使用文件头的类型判断上传的文件是否为图片类型,需要的朋友可以参考下

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java web 期末复习题库(便于打印)

    当访问一个 Servlet 时,...C 判断指定名字的 HTTP 文件头是否存在 D 向客户端发送错误信息 pageContext 对象的 findAttribute() 方法的作用是 A.用来设置默认页面的范围或指定范围之中的已命名对象 B.用来删除默

    Java网络编程-Socket-文件传输小案例

    //读取一个字节,获得文件头信息,判断发送信息类型(head or body) switch (cmd) { case 0x1: { ///文件信息 if (buflen &gt;= 260) { FileSize = buf.getInt(); //获取文件大小 byte[] filename = new byte[255]; ...

    JAVA上百实例源码以及开源项目源代码

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    Java开发技术大全(500个源代码).

    HelloNative.java 准备调用C函数的java文件 HelloNative.lib 用VC编译生成的静态库文件 HelloNative.obj 用VB编译生成的目标文件 HelloNativeTest.java 测试本地化是否成功的类文件 instanceVar.java 定义一个...

    java开源包4

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java实现office、wps转pdf,pdf转word

    支持word、excel、ppt、wps、txt等多种格式转pdf、并支持pdf转word。个人感觉非常好用。

    java多线程下载

    1.得到服务器下载文件的大小,然后在本地设置一个临时文件和服务器端文件大小一致 a)获得访问网络地址 b)通过URL对象的openConnection()方法打开连接,返回一个连接对象 c)设置请求头 i.setRequestMethod ii....

    23个常用的文件处理方法

    23个常用的文件处理方法,1.获取系统的默认编码,2.在某个路径下创建一个文件,3....根据文件头判断请求来自的浏览器,以便有针对性的对文件名转码 ,22.按行读取txt文件的内容 ,23.按行写入txt文件

    代码统计插件 eclipse plugin java

    你只要把传入的参数里的文件内容读取出来,然后按照你自定义的判断 注释、内容、总数、包声明、导入数、空白行数然后一个一个的设入到传入的result参 数里就可以了(没有的可以不设)。具体的可以参照简单的下面给...

Global site tag (gtag.js) - Google Analytics