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"),
/**
* CSS.
*/
CSS("48544D4C207B0D0A0942"),
/**
* JS.
*/
JS("696B2E71623D696B2E71"),
/**
* Email [thorough only].
*/
EML("44656C69766572792D646174653A"), /**
* Outlook Express.
*/
DBX("CFAD12FEC5FD746F"), /**
* Outlook (pst).
*/
PST("2142444E"), /**
* MS Word/Excel.
*/
XLS_DOC("D0CF11E0"), XLSX_DOCX("504B030414000600080000002100"),
/**
* Visio
*/
VSD("d0cf11e0a1b11ae10000"),
/**
* MS Access.
*/
MDB("5374616E64617264204A"),
/**
* WPS文字wps、表格et、演示dps都是一样的
*/
WPS("d0cf11e0a1b11ae10000"),
/**
* torrent
*/
TORRENT("6431303A637265617465"),
/**
* 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"),
/**
* JSP Archive.
*/
JSP("3C2540207061676520"),
/**
* JAVA Archive.
*/
JAVA("7061636B61676520"),
/**
* CLASS Archive.
*/
CLASS("CAFEBABE0000002E00"),
/**
* JAR Archive.
*/
JAR("504B03040A000000"),
/**
* MF Archive.
*/
MF("4D616E69666573742D56"),
/**
*EXE Archive.
*/
EXE("4D5A9000030000000400"),
/**
*CHM Archive.
*/
CHM("49545346030000006000"),
/*
* INI("235468697320636F6E66"), SQL("494E5345525420494E54"), BAT(
* "406563686F206f66660D"), GZ("1F8B0800000000000000"), PROPERTIES(
* "6C6F67346A2E726F6F74"), MXP(
* "04000000010000001300"),
*/
/**
* 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"),
/**
* MP4.
*/
MP4("00000020667479706d70"),
/**
* MP3.
*/
MP3("49443303000000002176"),
/**
* FLV.
*/
FLV("464C5601050000000900");
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;
} }
public final class FileTypeJudge {  

    /**
* Constructor
*/
private FileTypeJudge() {
} /**
* 将文件头转换成16进制字符串
*
* @param 原生byte
* @return 16进制字符串
*/
private static String bytesToHexString(byte[] src) { StringBuilder stringBuilder = new StringBuilder();
if (src == null || src.length <= 0) {
return null;
}
for (int i = 0; i < src.length; i++) {
int v = src[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
return stringBuilder.toString();
} /**
* 得到文件头
*
* @param filePath
* 文件路径
* @return 文件头
* @throws IOException
*/
private static String getFileContent(InputStream is) throws IOException { byte[] b = new byte[28]; InputStream inputStream = null; try {
is.read(b, 0, 28);
} catch (IOException e) {
e.printStackTrace();
throw e;
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
throw e;
}
}
}
return bytesToHexString(b);
} /**
* 判断文件类型
*
* @param filePath
* 文件路径
* @return 文件类型
*/
public static FileType getType(InputStream is) throws IOException { String fileHead = getFileContent(is);
if (fileHead == null || fileHead.length() == 0) {
return null;
}
fileHead = fileHead.toUpperCase();
FileType[] fileTypes = FileType.values(); for (FileType type : fileTypes) {
if (fileHead.startsWith(type.getValue())) {
return type;
}
} return null;
}
/**
*
* @param value 表示文件类型
* @return 1 表示图片,2 表示文档,3 表示视频,4 表示种子,5 表示音乐,6 表示其它
* @return
*/
public static Integer isFileType(FileType value) {
Integer type = 6;// 其他
// 图片
FileType[] pics = { FileType.JPEG, FileType.PNG, FileType.GIF, FileType.TIFF, FileType.BMP, FileType.DWG, FileType.PSD }; FileType[] docs = { FileType.RTF, FileType.XML, FileType.HTML, FileType.CSS, FileType.JS, FileType.EML, FileType.DBX, FileType.PST, FileType.XLS_DOC, FileType.XLSX_DOCX, FileType.VSD,
FileType.MDB, FileType.WPS, FileType.WPD, FileType.EPS, FileType.PDF, FileType.QDF, FileType.PWL, FileType.ZIP, FileType.RAR, FileType.JSP, FileType.JAVA, FileType.CLASS,
FileType.JAR, FileType.MF, FileType.EXE, FileType.CHM }; FileType[] videos = { FileType.AVI, FileType.RAM, FileType.RM, FileType.MPG, FileType.MOV, FileType.ASF, FileType.MP4, FileType.FLV, FileType.MID }; FileType[] tottents = { FileType.TORRENT }; FileType[] audios = { FileType.WAV, FileType.MP3 }; FileType[] others = {}; // 图片
for (FileType fileType : pics) {
if (fileType.equals(value)) {
type = 1;
}
}
// 文档
for (FileType fileType : docs) {
if (fileType.equals(value)) {
type = 2;
}
}
// 视频
for (FileType fileType : videos) {
if (fileType.equals(value)) {
type = 3;
}
}
// 种子
for (FileType fileType : tottents) {
if (fileType.equals(value)) {
type = 4;
}
}
// 音乐
for (FileType fileType : audios) {
if (fileType.equals(value)) {
type = 5;
}
}
return type;
} public static void main(String args[]) throws Exception {
System.out.println(
FileTypeJudge.isFileType(
FileTypeJudge.getType(
new FileInputStream(
new File("C:\\Users\\ituser1\\Desktop\\123.pptx")))));
for (FileType type : FileType.values()) {
System.out.print(type + "\t");
}
}
}

java文件上传,自动判断文件类型的更多相关文章

  1. SpringMVC文件上传下载(单文件、多文件)

    前言 大家好,我是bigsai,今天我们学习Springmvc的文件上传下载. 文件上传和下载是互联网web应用非常重要的组成部分,它是信息交互传输的重要渠道之一.你可能经常在网页上传下载文件,你可能 ...

  2. struts文件上传(多文件)

    第01步:配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version= ...

  3. 使用PHP实现文件上传和多文件上传

    PHP 2013 年 9 月 4 日 暂无评论 在PHP程序开发中,文件上传是一个使用非常普遍的功能,也是PHP程序员的必备技能之一.值得高兴的是,在PHP中实现文件上传功能要比在Java.C#等语言 ...

  4. (29)Spring boot 文件上传(多文件上传)【从零开始学Spring Boot】

    文件上传主要分以下几个步骤: (1)新建maven java project: (2)在pom.xml加入相应依赖: (3)新建一个表单页面(这里使用thymleaf); (4)编写controlle ...

  5. 强大的支持多文件上传的jQuery文件上传插件Uploadify

    支持多文件上传的jQuery文件上传插件Uploadify,目前此插件有两种版本即Flash版本和HTML5版本,对于HTML5版本会比较好的支持手机浏览器,避免苹果手机Safari浏览器不支持Fla ...

  6. skymvc文件上传支持多文件上传

    skymvc文件上传支持多文件上传 支持单文件.多文件上传 可以设定 文件大小.存储目录.文件类型 //上传的文件目录 $this->upload->uploaddir="att ...

  7. SpringMVC单文件上传、多文件上传、文件列表显示、文件下载(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 本文工程 ...

  8. Struts1文件上传、单文件、多文件上传【Struts1】

     将struts1文件上传的操作汇总了一下,包括单文件上传和多文件上传,内容如下,留作备忘: Struts2实现文件上传的文章(http://blog.csdn.net/itwit/article/d ...

  9. yii2.0单文件上传和多文件上传

    yii2文件上传使用到yii2自带的文件上传类UploadFIle,以及对应的模型规则,这里分别介绍单文件上传和多文件上传: yii2单个文件上传: 上传步奏,先创建上传表单模型model(包含验证规 ...

  10. struts2 笔记02 文件上传、文件下载、类型转换器、国际化的支持

    Struts2的上传 1. Struts2默认采用了apache commons-fileupload  2. Struts2支持三种类型的上传组件 3. 需要引入commons-fileupload ...

随机推荐

  1. 014--python运算符和作业改进

    一.运算符 % 取模,返回商的余数 10/3     3.33333333335 10//3    3   地板除,取整数,不是四舍五入 a = 3  b = 5  ----->   a< ...

  2. 简单聊聊ES6-Promise和Async

    前言 本篇博文出至于我的github仓库:web-study,如果你觉得对你有帮助欢迎star,你们的点赞是我持续更新的动力,谢谢! 异步编程在前端开发中尤为常见,从最早的XHR,到后来的各种封装aj ...

  3. 51nod1432【贪心】

    对于每个数我找一个和他相加最接近独木舟,然后ans+=1; 想复杂了,直接两端来就好了. 然后两个相加如果<=m那么就让它们在一起,不是的话就让大的一艘船,然后继续搞(贪心) #include ...

  4. bzoj 5294: [Bjoi2018]二进制【动态dp+线段树】

    不太清楚是不是动态dp--? 这个维护其实和最大连续子段差不多,维护l[x][y],r[x][y],m[x][y]分别表示包含左儿子的01个数为(x,y)的区间个数,包含右儿子的01个数为(x,y)的 ...

  5. USACO Training3.1联系【排序终极题目】By cellur925

    题目传送门 这题我们很容易想到直接枚举即可.算法本身并没有什么难度但是细节超多!于是这题整整卡了一天....... (不,还是我太弱了.) 期间还暴露出一些平时没有特别注意的问题,这次一起解决. 开始 ...

  6. [APIO2012]派遣 洛谷P1552 bzoj2809 codevs1763

    http://www.codevs.cn/problem/1763/ https://www.lydsy.com/JudgeOnline/problem.php?id=2809 https://www ...

  7. Broken BST CodeForces - 797D

    Broken BST CodeForces - 797D 题意:给定一棵任意的树,对树上所有结点的权值运行给定的算法(二叉查找树的查找算法)(treenode指根结点),问对于多少个权值这个算法会返回 ...

  8. pyinstaller 打包.exe文件记录遇到的问题

    用pyinstaller打包py2.7的程序有时会出现不匹配的错误,在python的idle下运行没有问题,打包之后却会报一些错误,所以打包的话还是尽量用py3.5版本,而且用 -F 将程序打包成一个 ...

  9. 【前端】jQurey Plugin

    ; (function ($, window, document, undefined) { "use strict"; var defaults = { name: " ...

  10. T4308 数据结构判断

    https://www.luogu.org/record/show?rid=2143639 题目描述 在世界的东边,有三瓶雪碧. ——laekov 黎大爷为了虐 zhx,给 zhx 出了这样一道题.黎 ...