1. public enum FileType {
  2. /**
  3. * JEPG.
  4. */
  5. JPEG("FFD8FF"),
  6.  
  7. /**
  8. * PNG.
  9. */
  10. PNG("89504E47"),
  11.  
  12. /**
  13. * GIF.
  14. */
  15. GIF("47494638"),
  16.  
  17. /**
  18. * TIFF.
  19. */
  20. TIFF("49492A00"),
  21.  
  22. /**
  23. * Windows Bitmap.
  24. */
  25. BMP("424D"),
  26.  
  27. /**
  28. * CAD.
  29. */
  30. DWG("41433130"),
  31.  
  32. /**
  33. * Adobe Photoshop.
  34. */
  35. PSD("38425053"),
  36.  
  37. /**
  38. * Rich Text Format.
  39. */
  40. RTF("7B5C727466"),
  41.  
  42. /**
  43. * XML.
  44. */
  45. XML("3C3F786D6C"),
  46.  
  47. /**
  48. * HTML.
  49. */
  50. HTML("68746D6C3E"),
  51. /**
  52. * CSS.
  53. */
  54. CSS("48544D4C207B0D0A0942"),
  55. /**
  56. * JS.
  57. */
  58. JS("696B2E71623D696B2E71"),
  59. /**
  60. * Email [thorough only].
  61. */
  62. EML("44656C69766572792D646174653A"),
  63.  
  64. /**
  65. * Outlook Express.
  66. */
  67. DBX("CFAD12FEC5FD746F"),
  68.  
  69. /**
  70. * Outlook (pst).
  71. */
  72. PST("2142444E"),
  73.  
  74. /**
  75. * MS Word/Excel.
  76. */
  77. XLS_DOC("D0CF11E0"), XLSX_DOCX("504B030414000600080000002100"),
  78. /**
  79. * Visio
  80. */
  81. VSD("d0cf11e0a1b11ae10000"),
  82. /**
  83. * MS Access.
  84. */
  85. MDB("5374616E64617264204A"),
  86. /**
  87. * WPS文字wps、表格et、演示dps都是一样的
  88. */
  89. WPS("d0cf11e0a1b11ae10000"),
  90. /**
  91. * torrent
  92. */
  93. TORRENT("6431303A637265617465"),
  94. /**
  95. * WordPerfect.
  96. */
  97. WPD("FF575043"),
  98.  
  99. /**
  100. * Postscript.
  101. */
  102. EPS("252150532D41646F6265"),
  103.  
  104. /**
  105. * Adobe Acrobat.
  106. */
  107. PDF("255044462D312E"),
  108.  
  109. /**
  110. * Quicken.
  111. */
  112. QDF("AC9EBD8F"),
  113.  
  114. /**
  115. * Windows Password.
  116. */
  117. PWL("E3828596"),
  118.  
  119. /**
  120. * ZIP Archive.
  121. */
  122. ZIP("504B0304"),
  123.  
  124. /**
  125. * RAR Archive.
  126. */
  127. RAR("52617221"),
  128. /**
  129. * JSP Archive.
  130. */
  131. JSP("3C2540207061676520"),
  132. /**
  133. * JAVA Archive.
  134. */
  135. JAVA("7061636B61676520"),
  136. /**
  137. * CLASS Archive.
  138. */
  139. CLASS("CAFEBABE0000002E00"),
  140. /**
  141. * JAR Archive.
  142. */
  143. JAR("504B03040A000000"),
  144. /**
  145. * MF Archive.
  146. */
  147. MF("4D616E69666573742D56"),
  148. /**
  149. *EXE Archive.
  150. */
  151. EXE("4D5A9000030000000400"),
  152. /**
  153. *CHM Archive.
  154. */
  155. CHM("49545346030000006000"),
  156. /*
  157. * INI("235468697320636F6E66"), SQL("494E5345525420494E54"), BAT(
  158. * "406563686F206f66660D"), GZ("1F8B0800000000000000"), PROPERTIES(
  159. * "6C6F67346A2E726F6F74"), MXP(
  160. * "04000000010000001300"),
  161. */
  162. /**
  163. * Wave.
  164. */
  165. WAV("57415645"),
  166.  
  167. /**
  168. * AVI.
  169. */
  170. AVI("41564920"),
  171.  
  172. /**
  173. * Real Audio.
  174. */
  175. RAM("2E7261FD"),
  176.  
  177. /**
  178. * Real Media.
  179. */
  180. RM("2E524D46"),
  181.  
  182. /**
  183. * MPEG (mpg).
  184. */
  185. MPG("000001BA"),
  186.  
  187. /**
  188. * Quicktime.
  189. */
  190. MOV("6D6F6F76"),
  191.  
  192. /**
  193. * Windows Media.
  194. */
  195. ASF("3026B2758E66CF11"),
  196.  
  197. /**
  198. * MIDI.
  199. */
  200. MID("4D546864"),
  201. /**
  202. * MP4.
  203. */
  204. MP4("00000020667479706d70"),
  205. /**
  206. * MP3.
  207. */
  208. MP3("49443303000000002176"),
  209. /**
  210. * FLV.
  211. */
  212. FLV("464C5601050000000900");
  213. private String value = "";
  214.  
  215. /**
  216. * Constructor.
  217. *
  218. * @param type
  219. */
  220. private FileType(String value) {
  221. this.value = value;
  222. }
  223.  
  224. public String getValue() {
  225. return value;
  226. }
  227.  
  228. public void setValue(String value) {
  229. this.value = value;
  230. }
  231.  
  232. }
  1. public final class FileTypeJudge {
  2.  
  3. /**
  4. * Constructor
  5. */
  6. private FileTypeJudge() {
  7. }
  8.  
  9. /**
  10. * 将文件头转换成16进制字符串
  11. *
  12. * @param 原生byte
  13. * @return 16进制字符串
  14. */
  15. private static String bytesToHexString(byte[] src) {
  16.  
  17. StringBuilder stringBuilder = new StringBuilder();
  18. if (src == null || src.length <= 0) {
  19. return null;
  20. }
  21. for (int i = 0; i < src.length; i++) {
  22. int v = src[i] & 0xFF;
  23. String hv = Integer.toHexString(v);
  24. if (hv.length() < 2) {
  25. stringBuilder.append(0);
  26. }
  27. stringBuilder.append(hv);
  28. }
  29. return stringBuilder.toString();
  30. }
  31.  
  32. /**
  33. * 得到文件头
  34. *
  35. * @param filePath
  36. * 文件路径
  37. * @return 文件头
  38. * @throws IOException
  39. */
  40. private static String getFileContent(InputStream is) throws IOException {
  41.  
  42. byte[] b = new byte[28];
  43.  
  44. InputStream inputStream = null;
  45.  
  46. try {
  47. is.read(b, 0, 28);
  48. } catch (IOException e) {
  49. e.printStackTrace();
  50. throw e;
  51. } finally {
  52. if (inputStream != null) {
  53. try {
  54. inputStream.close();
  55. } catch (IOException e) {
  56. e.printStackTrace();
  57. throw e;
  58. }
  59. }
  60. }
  61. return bytesToHexString(b);
  62. }
  63.  
  64. /**
  65. * 判断文件类型
  66. *
  67. * @param filePath
  68. * 文件路径
  69. * @return 文件类型
  70. */
  71. public static FileType getType(InputStream is) throws IOException {
  72.  
  73. String fileHead = getFileContent(is);
  74. if (fileHead == null || fileHead.length() == 0) {
  75. return null;
  76. }
  77. fileHead = fileHead.toUpperCase();
  78. FileType[] fileTypes = FileType.values();
  79.  
  80. for (FileType type : fileTypes) {
  81. if (fileHead.startsWith(type.getValue())) {
  82. return type;
  83. }
  84. }
  85.  
  86. return null;
  87. }
  88. /**
  89. *
  90. * @param value 表示文件类型
  91. * @return 1 表示图片,2 表示文档,3 表示视频,4 表示种子,5 表示音乐,6 表示其它
  92. * @return
  93. */
  94. public static Integer isFileType(FileType value) {
  95. Integer type = 6;// 其他
  96. // 图片
  97. FileType[] pics = { FileType.JPEG, FileType.PNG, FileType.GIF, FileType.TIFF, FileType.BMP, FileType.DWG, FileType.PSD };
  98.  
  99. 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,
  100. FileType.MDB, FileType.WPS, FileType.WPD, FileType.EPS, FileType.PDF, FileType.QDF, FileType.PWL, FileType.ZIP, FileType.RAR, FileType.JSP, FileType.JAVA, FileType.CLASS,
  101. FileType.JAR, FileType.MF, FileType.EXE, FileType.CHM };
  102.  
  103. FileType[] videos = { FileType.AVI, FileType.RAM, FileType.RM, FileType.MPG, FileType.MOV, FileType.ASF, FileType.MP4, FileType.FLV, FileType.MID };
  104.  
  105. FileType[] tottents = { FileType.TORRENT };
  106.  
  107. FileType[] audios = { FileType.WAV, FileType.MP3 };
  108.  
  109. FileType[] others = {};
  110.  
  111. // 图片
  112. for (FileType fileType : pics) {
  113. if (fileType.equals(value)) {
  114. type = 1;
  115. }
  116. }
  117. // 文档
  118. for (FileType fileType : docs) {
  119. if (fileType.equals(value)) {
  120. type = 2;
  121. }
  122. }
  123. // 视频
  124. for (FileType fileType : videos) {
  125. if (fileType.equals(value)) {
  126. type = 3;
  127. }
  128. }
  129. // 种子
  130. for (FileType fileType : tottents) {
  131. if (fileType.equals(value)) {
  132. type = 4;
  133. }
  134. }
  135. // 音乐
  136. for (FileType fileType : audios) {
  137. if (fileType.equals(value)) {
  138. type = 5;
  139. }
  140. }
  141. return type;
  142. }
  143.  
  144. public static void main(String args[]) throws Exception {
  145. System.out.println(
  146. FileTypeJudge.isFileType(
  147. FileTypeJudge.getType(
  148. new FileInputStream(
  149. new File("C:\\Users\\ituser1\\Desktop\\123.pptx")))));
  150. for (FileType type : FileType.values()) {
  151. System.out.print(type + "\t");
  152. }
  153. }
  154. }

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. Educational Codeforces Round 21E selling souvenirs (dp)

    传送门 题意 给出n个体积为wi,价值为ci的物品,现在有一个m大的背包 问如何装使得最后背包内的物品价值最大,输出价值 分析 一般的思路是01背包,但n*v不可做 题解的思路 We can iter ...

  2. bzoj 2064: 分裂【状压dp】

    参考:https://www.cnblogs.com/liu-runda/p/6019426.html 有点神奇 大概就是显然最直观的转移是全部合起来再一个一个拆,是n+m次,然后设f[i][j]为分 ...

  3. Windows、Linux、Android常用软件分享

    Windows.Linux.Android常用软件分享 前言 本来没准备写这篇博客,一是没时间,还有其他很多优先级更高的事情要做.二是写这种博客对我自己来说没什么的帮助,以前我就想好了不写教程类,使用 ...

  4. SOA架构设计和相关案例分析

    一.SOA概念 1.定义: SOA,是一个组件模型,面向服务的体系架构,它将应用程序的不同服务通过这些服务之间定义良好的接口和契约联系起来,不涉及底层编程接口和通讯模型.服务层是SOA的基础,可以直接 ...

  5. Centos 内存释放

    原因:最近发现服务器老师提示内存不足的警报,很多时候内存都占用百分之80以上,查看运行的服务似乎并没有占用很大的内存,top查看运行的服务,然后按shift+m排名第一的才百分之1.x,看了别人的博客 ...

  6. [SDOI2016]模式字符串

    Description 给出n个结点的树结构T,其中每一个结点上有一个字符,这里我们所说的字符只考虑大写字母A到Z,再给出长度为m的模式串s,其中每一位仍然是A到z的大写字母.Alice希望知道,有多 ...

  7. HDU - 6066 RXD's date

    Bryce1010模板 http://acm.hdu.edu.cn/showproblem.php?pid=6066 #include <iostream> using namespace ...

  8. 关于BMP

    关于BMP位图的资料网上有很多,内容也比较基础.本文实现BMP位图的读取.显示.保存,并对一些重要的问题进行说明(包括字节对齐.内存中的存储顺序.调色板). BMP文件共包括文件头.信息头.调色板(位 ...

  9. canvas 平移&缩放

    1.平移 canvas其实只是一个包装器,真正起着重要作用的部分是2D渲染上下文,这才是我们真正绘制图形的地方. 然而2D渲染上下文是一种基于屏幕的标准绘制平台.它采用屏幕的笛卡尔坐标系统,以左上角( ...

  10. 【转】JobScheduler

    JobScheduler JobScheduler是Android L(API21)新增的特性,用于定义满足某些条件下执行的任务.它的宗旨是把一些不是特别紧急的任务放到更合适的时机批量处理,这样可以有 ...