誊抄自原来的笔记

背景

有时我们需要对上传的文件进行判断文件类型,一般我们可以通过扩展名来判断文件属于什么类型,但是当文件没有扩展名或者一张图片改成了txt,我们通过扩展名的方式来判断是不是就不太合适了呢,其实我们可以根据文件中的文件头来判断实际文件类型

一,新建文件枚举类(文件类型与文件头之间的映射关系)

package cn.test.enums;/*** 用于判断上传文件的真实文件类型的枚举类*/
public enum FileType {/*** JEPG.*/JPEG("FFD8FF"),/*** PNG.*/PNG("89504E47"),/*** GIF.*/GIF("47494638"),/*** TIFF.*/TIFF("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).*/PST("2142444E"),/*** MS Word/Excel.*/XLS_DOC("D0CF11E0"),/*** MS Access.*/MDB("5374616E64617264204A"),/*** WordPerfect.*/WPD("FF575043"),/*** Postscript.*/EPS("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).*/MPG("000001BA"),/*** Quicktime.*/MOV("6D6F6F76"),/*** Windows Media.*/ASF("3026B2758E66CF11"),/*** MIDI.*/MID("4D546864");private String value = "";/*** Constructor.* * @param type*/private FileType(String value) {this.value = value;}public String getValue() {return value;}public void setValue(String value) {this.value = value;}
}

二,类型判断核心类

package cn.test.main;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import cn.test.enums.FileType;public final class JudgeFileType {public JudgeFileType() {}/*** 将文件头转换成16进制字符串 * @param src 待转换的字节流* @return 转成十六进制的字符形式*/private static String bytesToHexString(byte[] src){StringBuilder sb = new StringBuilder();if(src == null || src.length < 0){return null;}for(int i = 0,len = src.length; i < len; i++){int j = src[i] & 0xFF;String hexString = Integer.toHexString(j);if(hexString.length() < 2){sb.append(0);}sb.append(hexString);}return sb.toString();}/*** * @param filePath 文件路径* @return 文件头*/private static String getFileContent(String filePath){byte[] b = new byte[28];  InputStream inputStream = null;  try {  inputStream = new FileInputStream(filePath);  inputStream.read(b, 0, 28);  } catch (IOException e) {  e.printStackTrace();  } finally {  if (inputStream != null) {  try {  inputStream.close();  } catch (IOException e) {  e.printStackTrace();  }  }  }  return bytesToHexString(b);}/** * 判断文件类型 * @param filePath 文件路径 * @return 文件类型 */ public static FileType getType(String filePath){String fileHead = getFileContent(filePath);  if (fileHead == null || fileHead.length() == 0) {  return null;  }  fileHead = fileHead.toUpperCase();  FileType[] fileTypes = FileType.values();  for (FileType type : fileTypes) {  if (fileHead.startsWith(type.getValue()) || type.getValue().startsWith(fileHead)) {  return type;  }  }  return null; }
}

三、使用方法

System.out.println(JudgeFileType.getType("D:\\阿里开发规范-Java"));

Java:通过读取文件头来得到文件真实类型相关推荐

  1. 实战 - 文件上传功能:校验文件类型,文件大小,获取文件真实类型

    文件上传的漏洞和防御-设置黑名单和白名单 以PHP脚本语言为例,一些文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过Web访问的目录上传任意PHP文件,并能够 ...

  2. java 校验文件类型_java判断文件真实类型

    代码如下: importjava.io.FileInputStream;importjava.io.IOException;importjava.util.HashMap;/*** * 类描述:获取和 ...

  3. php读取某类型文件代码,php代码实现读取文件头判断文件类型

    php代码实现读取文件头判断文件类型,支持图片.rar.exe等后缀. 案例: //为图片的路径可以用d:/upload/11.jpg等绝对路径 $file = fopen($filename, &q ...

  4. Shapefile文件读取-文件头

    1 介绍 在Shapefile文件格式介绍一文中我们介绍了shapefile文件的结构组成,本文主要介绍如何读取shapefile文件头部分,使用的语言是c++. 2 文件头结构 Shapefile文 ...

  5. 16进制文件头笔记及文件类型判断代码

    之前做过一个功能,说是上传文件到服务器,但是所有文件excel.word.音乐.视频等都上传到一个文件夹,不利于查找,于是自己上网查询关于这方面的资料,决定按文件后缀名,给文件进行分类,存放不同的文件 ...

  6. 根据文件头信息来判断文件类型

    常用的判断文件类型的方法 有 根据文件类型,文件后缀,这里有一种方法,根据文件头信息来判断文件类型. 我把多余的getAllFileType()  给注释掉了,可以根据使用来选择. 这个参考了,忘了地 ...

  7. 打包部署后无法读取jar包里的文件(实测可行,Java中读取jar包中的文件)

    打包部署后无法读取jar包里的文件 Java中读取jar包中的文件 linux中无法读取jar包中的内容(windows可以的!),如何解决 一.背景 项目中免不了需要读取文件,如果文件用绝对路径读取 ...

  8. 利用文件头标志判断文件类型

    简介 我们都知道,文件的扩展名是用来识别文件类型的.通过给他指定扩展名,我们可以告诉自己,也告诉操作系统我们想用什么方式打开这个文件.比如我么会把.jpg的文件默认用图片显示软件打开,.zip 文件会 ...

  9. html的文件头标志,各类文件的文件头标志.docx

    各类文件的文件头标志.docx 还剩 12页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: 扩展名 文件头标识( ...

最新文章

  1. 关于 linux io_uring 性能测试 及其 实现原理的一些探索
  2. 深入学习jQuery的三种常见动画效果
  3. ECCV 2020 亮点摘要(上)
  4. python爬取网页表格数据匹配,python爬虫——数据爬取和具体解析
  5. Spring源码解析——如何阅读源码
  6. 什么可以搜python答案_超星Python程序设计答案章节测试答案免费,能搜索网课答案的公众号...
  7. XML学习笔记--导航
  8. 后缀表达式/逆波兰表达式
  9. MSSQL数据库初级到高级的学习资料整理
  10. Halcon深度学习超参数
  11. php 根据ip判断是否中国,PHP判断IP是中国IP还是外国IP
  12. 使用matlab计算 洛伦兹方程 的李雅普诺夫指数
  13. android对接大华条码秤实例
  14. 【天光学术】体育论文:乒乓球少年运动员专项身体素质训练探究(节选)
  15. [0CTF 2016]piapiapia BUUCTF 详细writeup
  16. HiveSql计算占比、同比、占环比
  17. 每日程序C语言37-圈子报数问题
  18. cisco IOS,nexus和Arista 的vrrp
  19. cocos creator 如何制作九宫格抽奖
  20. 服务器名称没有显示,远程服务器名称问题没有解决

热门文章

  1. linux 代码格式化工具下载,Linux 代码格式化工具 indent
  2. 全网最后一个免费版本,永久可用
  3. Java:Windows 10下载和配置JDK
  4. sqlserver 登录名与数据库用户
  5. 压缩文件密码破解神器rarcrack
  6. 数说IN语丨万豪酒店再敲警钟!防数据泄露,数博士有妙招!
  7. python羊车门问题的正确解答_羊车门问题python模拟
  8. 3060Ti显卡,tensorflow2.4-GPU安装
  9. python四叶玫瑰数,任意位数自幂数寻找|Python练习系列[4]
  10. 【大疆DJI】安卓开发实习历程- 0.前期准备到面试(HR电话初面+技术一面+技术二面/终面+OC)