辨别文件的真实类型

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

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

转载于:https://my.oschina.net/bughope/blog/403749

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ng build --prod --aot打包Angluar4项目报javaScript heap out of memory,内存溢出

这里 Allocation failed - JavaScript heap out of memory JavaScript堆内存不足&#xff0c;我们都知道 Node 是基于V8引擎&#xff0c;在一般的后端开发语言中&#xff0c;在基本的内存使用上没有什么限制&#xff0c;但是我去查阅了相关的资料才发现&#xff0c;在 Node 中通…

GARFIELD@12-02-2004

your BELLY is more ready to be convinced than your BRAIN 转载于:https://www.cnblogs.com/rexhost/archive/2004/12/02/72000.html

LeetCode—223. 矩形面积

223. 矩形面积 题目描述&#xff1a; 给你 二维 平面上两个 由直线构成且边与坐标轴平行/垂直 的矩形&#xff0c;请你计算并返回两个矩形覆盖的总面积。 每个矩形由其 左下 顶点和 右上 顶点坐标表示&#xff1a; 第一个矩形由其左下顶点 (ax1, ay1) 和右上顶点 (ax2, ay2)…

GARFIELD@01-31-2005

savage sandwich 转载于:https://www.cnblogs.com/rexhost/archive/2005/01/31/99836.html

【ABAP系列】SAP ABAP模块-任意report作为附件以邮件形式发送

公众号&#xff1a;SAP Technical本文作者&#xff1a;matinal原文出处&#xff1a;http://www.cnblogs.com/SAPmatinal/ 原文链接&#xff1a;【ABAP系列】SAP ABAP模块-任意report作为附件以邮件形式发送前言部分 大家可以关注我的公众号&#xff0c;公众号里的排版更好&…

[Mac]一些命令技巧

Git相关 mac下git默认不区分大小写&#xff0c;通过下面脚本可以改变 #!/bin/bash# 让git区分大小写 cd path-of-project git config core.ignorecase false git不会将空文件夹添加到版本控制中&#xff0c;下面脚本可以让空文件夹加到git # 将所有空文件夹添加到git cd path-o…

GARFIELD@02-24-2005

a cat on a ball 转载于:https://www.cnblogs.com/rexhost/archive/2005/02/25/109153.html

网站总结 和 相关控件 总结

2019独角兽企业重金招聘Python工程师标准>>> 学习篇 https://github.com/Aufree/trip-to-iOS 开源库 http://github.ibireme.com/github/list/ios/ 项目管理和工具 测试&#xff1a;TestFlight 依赖管理&#xff1a;CocoaPods 自动生成推送证书&#xff1a;Gen…

西门子新款A系列手机【ZZ】

linked from http://www.tompda.com/neirong.asp?id809 西门子新款A系列手机   首页 > 新闻资讯 提交 shizhi 2005-2-25  阅读:2739次 10篇评论 西门子公司近日推出了A系列手机&#xff0c;A系列手机作为入门级手机&#xff0c;设计和功能十分简洁和实用。 西门子A70:设…

Chord算法

转自&#xff1a;http://blog.csdn.net/wangxiaoqin00007/article/details/7374833 虽然网上搜索CHord&#xff0c;一搜一大堆&#xff0c;但大多讲得不太清楚明白。今天发现一篇blog&#xff0c;图文并茂&#xff0c;逻辑清楚且易懂&#xff0c;特意转载收藏。 P2P的一个常见问…

地籍宗地出图(一)

在ArcGIS中&#xff0c;我们经常需要标注&#xff1b;在地籍处理中&#xff0c;需要承包地出图。具体的出没有可参考的标准。通常软件中的做法有&#xff1a; 第一种&#xff0c;以村组为背景&#xff0c;将某户的承包地选择出来&#xff0c;并标黑。这样的结果&#xff0c;领导…

黑马程序员_java基础笔记(15)...银行业务调度系统_编码思路及代码

—————————— ASP.NetAndroidIOS开发、.Net培训、期待与您交流&#xff01;—————————— 1&#xff0c;面试题目&#xff1a;银行业务调度系统 模拟实现银行业务调度系统逻辑&#xff0c;具体需求如下&#xff1a; 银行内有6个业务窗口&#xff0c;1 — 4号窗口…

一次非常有意思的sql优化经历

原文:一次非常有意思的sql优化经历场景 我用的数据库是mysql5.6&#xff0c;下面简单的介绍下场景 课程表 create table Course(c_id int PRIMARY KEY,name varchar(10))数据100条 学生表: create table Student(id int PRIMARY KEY,name varchar(10))数据70000条 学生成绩表SC…

python matplotlib绘图大全(散点图、柱状图、饼图、极坐标图、热量图、三维图以及热图)...

//2019.7.14晚matplotlib七种常见图像输出编程大全 七种图形汇总输出如下&#xff1a; import numpy as np #导入数据结构nmupy模块import matplotlib.pyplot as plt #导入matplotlib图像输出模块plt.rcParams["font.sans-serif"]["SimHei"] #输出图像的标…

【活动】畅想云端加油站,赢iPad

2019独角兽企业重金招聘Python工程师标准>>> 中石化联手阿里云升级石油化工业务&#xff0c;已运行2月 中石化的“互联网”战略正在不断深化。4月20日消息&#xff0c;中石化与阿里云共同宣布&#xff0c;双方将展开技术合作&#xff0c;借助阿里巴巴在云计算、大数…

编写 Servlet 2.3 Filter

Servlets Filter 是Servlet 2.3 规范中新增加的&#xff0c;它是截取用户从客户端提交的请求&#xff0c;在还没有到达需要访问的资源时运行的一个类。它操纵来自客户端的请求&#xff0c;在资源还没有初发送到客户端前截取响应&#xff0c;并处理这些还没有发送到客户端的响应…

我记录网站综合系统 -- 技术原理解析[0:简介(代序) 1.7Beta源代码下载开始]...

看到了路过秋天的博客系统受到了大家的好评&#xff0c;我也来介绍一个好的开源的CMS系统。我记录网站综合系统 是 掷鸡蛋者 的作品&#xff0c;这个家伙将大量的时间和精力放在这个项目上了&#xff0c;可以算一个创业项目。对于这样的同志&#xff0c;我只有敬佩他和全力支持…

PowerShell在Exchange2010下快速创建动态通讯组

Exchange中遇到一个小需求&#xff0c;有很多部门要申请动态通信组&#xff0c;问题是二级部门三级部门四级部门非常非常多。……Get-ADObject -LDAPFilter "(&(&(ou>"")))" -SearchBase OUxx,OUxxx,DCxxx,DCxxx,DCcom -Properties CanonicalNa…

LeetCode—262. 行程和用户(困难)

262. 行程和用户(困难) 题目描述&#xff1a; 取消率 的计算方式如下&#xff1a;(被司机或乘客取消的非禁止用户生成的订单数量) / (非禁止用户生成的订单总数)。 写一段 SQL 语句查出 “2013-10-01” 至 “2013-10-03” 期间非禁止用户&#xff08;乘客和司机都必须未被禁止…

第5章 JVM调优

2019独角兽企业重金招聘Python工程师标准>>> ##5.1 Java虚拟机内存模型## Java虚拟机内存模型是Java程序运行的基础。JVM将其内存数据分为程序计数器&#xff0c;虚拟机栈&#xff0c;本地方法栈&#xff0c;Java堆和方法区等部分。 程序计数器&#xff1a;用于存放…