辨别文件的真实类型

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)…

Spring Android 1.0.0.M3 发布

Spring Android 项目今天发布了第三个里程碑版本。 Spring Android 是一个在 Android 环境下使用 Spring 框架的项目&#xff0c;M3 版本主要是为 Android 应用扩展了对 Spring Social 的支持&#xff0c;包括&#xff1a; 通过全新的 Spring Android Auth 模块支持 Spring Soc…

几种开源工作流引擎的简单比较(转)

摘要&#xff1a;目前开源工作流引擎用的最多的是jbpm &#xff0c; 各种特性都不错&#xff0c; 文档也比较多&#xff0c; 下面只简单列举一下目前开源工作流引擎用的最多的是jbpm &#xff0c; 各种特性都不错&#xff0c; 文档也比较多&#xff0c; 下面只简单列举一下 其他…

LeetCode—224. 基本计算器(困难)

224. 基本计算器&#xff08;困难&#xff09; 题目描述&#xff1a; 给你一个字符串表达式 s &#xff0c;请你实现一个基本计算器来计算并返回它的值。 注意:不允许使用任何将字符串作为数学表达式计算的内置函数&#xff0c;比如 eval()。 考察重点&#xff1a;使用go建立…

LBS业务资料随记

技术规范&#xff1a;设备技术要求&#xff0c;SP Access接口规范&#xff0c;GIS结构规范、L1接口规范、地图标准规范、终端规范 一个小型的ArcIMS网站 http://www.geo-spatial.net/csk/Downloads/default.aspx 基于位置的业务 。。随着用户移动终端设备的普及&#xff0c;简…

shell 和 || 的短路使用

shell && 和 || 的短路使用 && 和 || 在 shell 中分别表示 and 和  or&#xff0c;和其它语言类似&#xff0c;这两个操作有短路效应。也就是说&#xff0c;当判断式已经确定时&#xff0c;不再继续处理后续表达式。 && 在失败时中断&#xff0c; || …

XiaoKL学Python(C)__future__

__future__ in Python 1. from __future__ import xxxx 这是为了在低版本的python中使用可能在某个高版本python中成为语言标准的特性&#xff0c;从而 在将代码由低版本迁移到高版本的过程中&#xff0c;减少需要做的工作。 这种语句被称为 future_statement 2. future_state…

LeetCode—227. 基本计算器 II

227. 基本计算器 II 题目描述&#xff1a; 给你一个字符串表达式 s &#xff0c;请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。 注意&#xff1a;不允许使用任何将…

GARFIELD@01-31-2005

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

js 和 query 获取页面和滚动条的高度

//页面位置及窗口大小 function GetPageSize() {var scrW, scrH; if(window.innerHeight && window.scrollMaxY) { // Mozilla scrW window.innerWidth window.scrollMaxX; scrH window.innerHeight window.scrollMaxY; } else if(document.body.scrollHe…

【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

LeetCode—229. 求众数 II

229. 求众数 II 题目描述&#xff1a; 给定一个大小为 n 的整数数组&#xff0c;找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 考察重点&#xff1a;设超过 ⌊ n/3 ⌋ 次的元素有a个&#xff0c;则一定有 ⌊ n/3 ⌋ * a < n。即这种元素至多存在2个。 先用摩尔投票法求出最…

c2c网站源码

c2c网站源码是一套由网畅™(68ws.com)基于PHPMySQL技术的Web电子商务程序。c2c网站源码的主要功能有&#xff1a;采用了缓存更新处理&#xff0c;积木式查询显示&#xff0c;后台HTML模板管理&#xff0c;c2c网站源码首页商品和店铺的自助推荐功能&#xff0c;支持拍卖模式&…

网站总结 和 相关控件 总结

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:设…

LeetCode—230. 二叉搜索树中第K小的元素

230. 二叉搜索树中第K小的元素 题目描述&#xff1a; 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 个最小元素&#xff08;从 1 开始计数&#xff09;。 考察重点&#xff1a;中序遍历&#xff0c;借助go多线程实现…