`

辨别文件的真实类型

阅读更多

参考博客http://blog.csdn.net/shixing_11/article/details/5708145

每个文件类型都对应着一个编码头部

下面这些是已知的文件头部[自定义的枚举类型]

package org.masque.file;
/**
 * 
 * Description:文件对应的文件头,资源来自网络
 * FileHead.java Create on 2014年6月22日 下午1:14:03 
 * @author masque.java@outlook.com
 * @version 1.0
 * Copyright (c) 2014 Company,Inc. All Rights Reserved.
 */
public enum FileHead {

	 JPG("jpg", "FFD8FF"), //JPEG (jpg)  
     PNG("png", "89504E47"),  //PNG (png)  
     GIF("gif", "47494638"),  //GIF (gif)  
     TIF("tif", "49492A00"),  //TIFF (tif)  
     BMP("bmp", "424D"), //Windows Bitmap (bmp)  
     DWG("dwg", "41433130"), //CAD (dwg)  
     HTML("html", "68746D6C3E"),  //HTML (html)  
     RTF("rtf", "7B5C727466"),  //Rich Text Format (rtf)  
     XML("xml", "3C3F786D6C"),  
     ZIP("zip", "504B0304"),  
     RAR("rar", "52617221"),  
     PSD("psd", "38425053"),  //Photoshop (psd)  
     EML("eml", "44656C69766572792D646174653A"),  //Email [thorough only] (eml)  
     DBX("dbx", "CFAD12FEC5FD746F"),  //Outlook Express (dbx)  
     PST("pst", "2142444E"),  //Outlook (pst)  
     DOC_XLS("doc_xls", "D0CF11E0"),  //MS Excel 注意:word 和 excel的文件头一样  
     MDB("mdb", "5374616E64617264204A"),  //MS Access (mdb)  
     WPD("wpd", "FF575043"), //WordPerfect (wpd)   
     EPS("eps", "252150532D41646F6265"),  
     PS("ps", "252150532D41646F6265"),  
     PDF("pdf", "255044462D312E"),  //Adobe Acrobat (pdf)  
     QDF("qdf", "AC9EBD8F"),  //Quicken (qdf)  
     PWL("pwl", "E3828596"),  //Windows Password (pwl)  
     WAV("wav", "57415645"),  //Wave (wav)  
     AVI("avi", "41564920"),  
     RAM("ram", "2E7261FD"),  //Real Audio (ram)  
     RM("rm", "2E524D46"), //Real Media (rm)  
     MPG("mpg", "000001BA"),  //  
     MOV("mov", "6D6F6F76"),  //Quicktime (mov)  
     ASF("asf", "3026B2758E66CF11"), //Windows Media (asf)  
     MID("mid", "4D546864");  //MIDI (mid)  
     
     private String type;
     
     private String code;
     
     FileHead(String type,String code){
    	 this.type = type;
    	 this.code = code;
     }

	public String getType() {
		return type;
	}

	public String getCode() {
		return code;
	}
	
	public static FileHead getLikeCode(String code){
		System.out.println(code);
		if (code==null||"".equals(code)) 
			return null;
		code = code.toUpperCase();
		FileHead [] fhs = FileHead.values();
		for (FileHead fh:fhs) {
			//模糊匹配文件头
			if (code.startsWith(fh.code)) {
				return fh;
			}
		}
		return null;
	}
	
	public static FileHead getByType(String type){
		FileHead [] fhs = FileHead.values();
		for (FileHead fh:fhs) {
			if (fh.getType().equals(type)) {
				return fh;
			}
		}
		return null;
	}
	
	public static FileHead getByCode(String code){
		FileHead [] fhs = FileHead.values();
		for (FileHead fh:fhs) {
			if (fh.getCode().equals(code)) {
				return fh;
			}
		}
		return null;
	}
}

 使用方法如下

package org.masque.file;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
/**
 * 
 * Description: 读取文件的前部分字节在已知的库中比对
 * CheckFileHead.java Create on 2014年6月22日 下午1:48:09 
 * @author masque.java@outlook.com
 * @version 1.0
 * Copyright (c) 2014 Company,Inc. All Rights Reserved.
 */
public class CheckFileHead {

	public static void main(String[] args) {
		String fileHeadStr = getFileByFile(new File("C:/40882199905262314.jpg"));
		FileHead fileHead = FileHead.getLikeCode(fileHeadStr);
		System.out.println(fileHead!=null?fileHead.getType():"未知的文件类型!");
	}
	
	public final static String getFileByFile(File file)    
    {    
        String filetype = null;    
        byte[] b = new byte[30];    
        try    
        {    
            InputStream is = new FileInputStream(file);    
            is.read(b);    
            filetype = getFileHexString(b);
            is.close();    
        }    
        catch (FileNotFoundException e)    
        {    
            e.printStackTrace();    
        }    
        catch (IOException e)    
        {    
            e.printStackTrace();    
        }    
        return filetype;    
    }    
	
	public final static String getFileHexString(byte[] b)    
    {    
        StringBuilder stringBuilder = new StringBuilder();    
        if (b == null || b.length <= 0)    
        {    
            return null;    
        }    
        for (int i = 0; i < b.length; i++)    
        {    
            int v = b[i] & 0xFF;    
            String hv = Integer.toHexString(v);    
            if (hv.length() < 2)    
            {    
                stringBuilder.append(0);    
            }    
            stringBuilder.append(hv);    
        }    
        return stringBuilder.toString();    
    }    
}

 代码比较简单就不做详细介绍

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    js判断图片真实性(非判断文件后缀)

    通过读取并比较这些文件头,我们可以有效地辨别文件是否为真正的图片。 例如,PNG图片的文件头是"\x89PNG\x0D\x0A\x1A\x0A",在JavaScript中,我们可以用`substr()`函数提取文件的前几个字符来进行比对。下面是一个...

    虚假文件识别程序.doc

    这一程序主要针对的是接收的文件,目的是辨别文件的真实性,防止因虚假文件导致的潜在风险和损失。以下是对该程序的详细解析: 一、目的与重要性 虚假文件识别程序的核心目的是保护企业的正常运作,避免因为错误或...

    虚假文件识别程序(1).doc

    各部门主管需考虑本部门的特定文件类型,制定相应的识别策略,并对员工进行定制化的培训,确保每位员工都具备辨别文件真伪的能力。 4. **奖励机制**: 为了激励员工积极参与文件真伪的识别,公司制定了奖励措施。...

    grd的高程数据的下载

    在地图制作中,它可以提供真实的地表高程信息,使得地图更加精确;在环境研究中,可用于水文分析、洪水模拟、气候模型研究等。 总的来说,"grd"高程数据的下载和处理是GIS工作中的一项基础任务,熟练掌握相关的软件...

    BSQ格式文件的读取

    VC++作为一种功能强大的C++编程环境,可以用来开发处理这种类型文件的应用程序。在使用VC++处理BSQ文件时,我们需要理解其内部结构并编写相应的代码来解析数据。 首先,了解BSQ文件的基本结构至关重要。BSQ文件通常...

    阿拉伯数字的wav音频文件,wav是数字音频文件格式.zip

    描述中提到的“阿拉伯数字的wav音频文件”暗示了这些文件可能包含用语音合成或真实人声读出的阿拉伯数字。在语音识别、语言学习、互动软件或电话自动应答系统中,这样的音频文件非常有用。例如,它们可以作为训练...

    win8怎样快速找到隐藏文件.docx

    4. **查看文件扩展名**:同样在查看菜单下,勾选“文件扩展名”,可以让你看到每个文件的真实扩展名,这对于辨别文件类型非常重要。 #### 三、Win8系统中IE10浏览器的云同步功能 随着云计算技术的发展,“云同步”...

    计算机图形图像类型推选优秀ppt.ppt

    高分辨率的点阵图意味着图像更为细腻,细节更为丰富,但与此同时,它们的文件体积也更大,需要更多的存储空间和更强大的处理能力。 点阵图的尺寸和大小受到其像素数量的影响。而图像的颜色深度,即位深度,决定了...

    易语言配置文件辅助模块

    这个功能能够帮助开发者辨别哪些节是真实的,从而避免因误操作导致的问题。 2. **从资源获取所有节名称**:在配置文件中,"节"通常代表不同的配置区域,比如“[用户设置]”或“[系统设置]”。这个功能允许开发者...

    pcm音频播放器.zip

    PCM音频播放器是专为播放这种类型的音频文件设计的软件。 PCM的基本工作原理是通过采样、量化和编码三个步骤将连续的模拟信号转换成离散的数字信号。首先,采样过程以一定的频率捕捉音频信号的幅度,这个频率决定了...

    无人机数据合成的tif格式文件(示例)

    6. **多光谱分析**:tif文件可能包含多光谱信息,通过对不同波段的分析,可以识别地物类型,如区分作物种类、评估植物健康状况。 7. **数字高程模型(DEM)**:结合无人机数据,可创建地形模型,用于分析地表起伏和...

    杜克大学——PLUSE预训练文件.docx

    尽管PULSE在图像超分辨率方面取得了显著成就,但依然存在一些挑战,比如处理动态图像时的实时性能、对不同类型的图像的泛化能力,以及如何在保持真实感的同时减少假象的生成。未来的研究可能会集中在这些问题的解决...

    Hex Editor Neo.zip

    4. **大文件支持**:Hex Editor Neo可以处理非常大的文件,这在处理高分辨率图像或大量图片集合时非常实用。 5. **集成校验和计算**:它内置了多种校验和(如CRC、MD5、SHA等)和哈希计算功能,可以验证图片文件的...

    布告牌技术的补充文件

    在OpenGL中,纹理是将颜色数据应用到几何形状上的重要方式,常用于创建复杂的表面效果和真实感渲染。这个头文件可能包含函数或类,用于读取常见的图像文件格式(如JPEG、PNG或BMP),并将其转换为OpenGL可以理解的...

    上传攻击总结.pdf

    这些检测方法可以帮助服务器确认文件的真实类型,以防止上传恶意文件。 在网络渗透的过程中,上传攻击的实质是攻击者利用文件上传功能的安全漏洞,突破网站的安全防线。文件上传攻击的原理涉及到直接解析上传的文件...

    Ultra Image Printer

    高分辨率可以保证图像的清晰度,但也会增加文件大小;反之,降低分辨率可以减小文件尺寸,但可能牺牲图像细节。 4. **格式支持**: Ultra Image Printer支持多种常见的图像格式,如JPEG(适合网络分享,但有压缩...

    高光谱数据Indian_pines

    3. `Indian_pines_gt.mat` 文件则是标签文件,其中包含了每个像素的真实类别信息,即地物分类结果。"gt"通常表示“Ground Truth”(地面实况),它是通过实地调查或者参照高分辨率图像获得的。这个标签文件是评估...

    行业分类-设备装置-一种纸币多光谱高分辨率图像采集系统及采集方法.zip

    标题中的“行业分类-设备装置-一种纸币多光谱高分辨率图像采集系统及采集方法”揭示了这个压缩包文件内容的核心,它涉及到的是金融行业,特别是与货币处理相关的设备技术。这种系统和方法主要用于纸币的识别和验证,...

    江苏省欧空局2020年土地利用数据tif格式

    这份数据基于欧洲空间局(ESA)的高分辨率遥感卫星图像,提供了10米的分辨率,意味着每个像素代表10米×10米的地面区域。这样的高精度使得数据在城市规划、农业管理、环境保护、灾害监测等多个领域都有广泛的应用。 ...

    bns证照快易通 V2.0单文件版

    这可能包括调整光线、对焦、色彩平衡等参数,以确保照片清晰、真实,符合各类证件的要求。 图像裁切功能是软件的另一大亮点。它内置了多种国际和国内通用的证照尺寸模板,如一寸、二寸、护照尺寸等,用户只需选择...

Global site tag (gtag.js) - Google Analytics