文档章节

辨别文件的真实类型

maskleo
 maskleo
发布于 2015/04/20 10:48
字数 561
阅读 2
收藏 0

参考博客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();    
    }    
}

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

本文转载自:http://bughope.iteye.com/blog/2083410

maskleo
粉丝 17
博文 128
码字总数 17344
作品 0
深圳
程序员
私信 提问
Generative Adversarial Network

这里我们将建立 一个对抗生成网络 (GAN)训练MNIST,并在最后生成新的手写数字。 这里先介绍几个Demo: Pix2Pix CycleGAN A whole list Pix2pix 基本上就是你画一个东西它就能生成类似的图片 ...

徐凯_xp
2018/01/10
0
0
在浏览器中进行深度学习:TensorFlow.js (八)生成对抗网络 (GAN)

Generative Adversarial Network 是深度学习中非常有趣的一种方法。GAN最早源自Ian Goodfellow的这篇论文。LeCun对GAN给出了极高的评价: “There are many interesting recent development...

naughty
2018/10/18
332
0
TensorFlow从1到2(十二)生成对抗网络GAN和图片自动生成

生成对抗网络的概念 上一篇中介绍的VAE自动编码器具备了一定程度的创造特征,能够“无中生有”的由一组随机数向量生成手写字符的图片。 这个“创造能力”我们在模型中分为编码器和解码器两个...

俺踏月色而来
05/07
0
0
Python 怎么判断一个文件是否是二进制文件呢

Python 怎么判断一个文件是否是二进制文件呢 比如 我在网上抓一组文件,这组文件有图片,有普通文本,有压缩包,有PDF各种类型的文件 如果是图片 或者 pdf保存的话需要使用二进制方式保存: ...

logbird
2013/09/02
2.5K
2
咱们公司要招大数据开发工程师,要求至少得2年以上工作经验的。请问大神们怎么准确辨别培训机构的漏网之鱼,很头疼。

RT,公司招大数据开发工程师,要求至少得2年以上工作经验的。培训机构出来的人太多了,哪有什么真实工作经验,boss有的简历一眼就能看出来,可有些伪装的太好了,真怕走眼。请问各位大神,怎...

望雲而起
2017/08/01
3.9K
22

没有更多内容

加载失败,请刷新页面

加载更多

哪些情况下适合使用云服务器?

我们一直在说云服务器价格适中,具备弹性扩展机制,适合部署中小规模的网站或应用。那么云服务器到底适用于哪些情况呢?如果您需要经常原始计算能力,那么使用独立服务器就能满足需求,因为他...

云漫网络Ruan
今天
10
0
Java 中的 String 有没有长度限制

转载: https://juejin.im/post/5d53653f5188257315539f9a String是Java中很重要的一个数据类型,除了基本数据类型以外,String是被使用的最广泛的了,但是,关于String,其实还是有很多东西...

低至一折起
今天
23
0
OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
11
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
9
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部