这个方法只能在有限的范围内有效。并不是万金油

比如

图片类型判断,音频文件格式判断,视频文件格式判断等这种肯定是2进制且专业性很强的文件类型判断。

下面给出完整版代码

首先是文件类型枚取

package org.filetype;

/**

* 文件类型枚取

*/

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 org.filetype;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

/**

* 文件类型判断类

*/

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(String filePath) throws IOException {

byte[] b = new byte[28];

InputStream inputStream = null;

try {

inputStream = new FileInputStream(filePath);

inputStream.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(String filePath) throws IOException {

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())) {

return type;

}

}

return null;

}

}

最后是测试类

package org.filetype;

public class Test {

/**

* @param args

*/

public static void main(String args[]) throws Exception {

System.out.println(FileTypeJudge.getType("C:\\eclipse-jee-helios-win32.zip"));

}

}

java 判断文件类型是否是音频_用java流方式判断文件类型相关推荐

  1. java无法访问封闭类型实例怎么解决_错误:无法访问OOPTutorial类型的封闭实例

    我是Java新手,想要做一个简单的程序来帮助我进一步理解面向对象的编程. 我决定做一个电话程序.然而,在下面的程序的第5行,我试图创建一个电话类的实例,我收到以下错误: "不能使用OOPTu ...

  2. JAVA中计算五子棋平局的算法_输入五子棋棋盘判断输赢或平局—程序设计(C语言)...

    输入五子棋棋盘判断输赢或平局-程序设计(C语言) 输入五子棋棋盘判断输赢或平局-程序设计(C语言) 输入五子棋棋盘判断输赢或平局-程序设计(C语言) ??做这道题实在没有思路参考了这位作者的代码: h ...

  3. java和c语言有关联吗_关于JAVA语言,和C语言有什么联系吗?

    展开全部 Java语言由语法规则和类库两部分组成,其中语法规则确定了Java程序的书写规范,62616964757a686964616fe59b9ee7ad9431333337626264学习好语法规 ...

  4. java传统的项目有哪些内容_请问java全套内容都有什么呢?

    我整理的Java全套内容学习路线,分为6个阶段(大阶段)第一阶段:java内功心法篇 第二阶段:Java武功秘籍(经典框架) 第三阶段:Java高级功法(主流框架) 第四阶段:Java成神之路 第五阶 ...

  5. java简单通讯录的实现02person类_用java实现简单的小游戏(你一定玩过)

    用java实现简单的小游戏(你一定玩过) 对于java初学者来说,通过一些学习小游戏来对swing学习以及对java基础的学习是一个好的方法,同时也给学习带来了很多的乐趣,接下来就给大家分享一个jav ...

  6. java语言采用16位颜色标准_华为Java笔试题一

    华为Java笔试题一 D.Servlet 2.下列说法正确的有( ) A. 环境变量可在编译source code时指定 B. 在编译程序时,所能指定的环境变量不包括class path C. jav ...

  7. java 中的finally你知多少_「JAVA」详述Java异常体系,处理异常时配上finally效果更佳...

    什么是异常 从事Java开发的小伙伴对于"异常"应该不陌生,因为每天都会遇到不少异常,或捕获,或抛出.那究竟什么是异常?异常即非正常的,不同于平常.一般化的情况.在平时生活中,医生 ...

  8. java 怎么优雅的写出代码_【Java】基础50:如何让写的代码像诗一样优雅?

    今天是刘小爱自学Java的第50天. 感谢你的观看,谢谢你. 话不多说,开始今天的学习: ‍ 一.Stream流引入 这个流和IO流中的流很容易弄混淆. 但是它们是两个完全不一样的概念,Stream流 ...

  9. java写一段程序代表心情_讨论java初步学习的方法及心情

    Java的重要性 Java语言的三大特点,面向对象.良好的跨平台性和健壮性,这三大特点使Java被广大编程人员接收并且使用.Java的核心机制有Java虚拟机和垃圾回收机制这两种,Java虚拟机通过解 ...

最新文章

  1. 爬虫requests如何提取图片_如何提取图片上的文字(办公技巧)
  2. linux系统防火墙相关问题及常用命令介绍
  3. html属性选择器怎么写,html – 具有“type”属性与make-up属性的CSS属性选择器和区分大小写...
  4. 深入理解JVM(1)——Java内存区域与Java对象
  5. Harbor2.2.1配置(trivy扫描器、镜像签名)
  6. 已知c语言程序有主程序模块prog.c,嵌入式系统试卷--A卷
  7. 用NGUI做一个计时条!
  8. centos6.8安装oracle12C 详细步骤讲解
  9. Python——分布式监控项目
  10. 【动态规划】状压dp:蓝桥2020补给(旅行商问题)
  11. Oracle 过程中检查数据表存在与否
  12. 多个注解可以合并成一个,包括自定义注解
  13. 大学生网页设计课程大作业1
  14. 大数据,云计算和物联网,三者之间的关系是什么?
  15. python normalize函数_Python Pandas Series.dt.normalize用法及代码示例
  16. (十四)单词之各动词讲解
  17. 如何打开.pdm文件(Mac OS X)
  18. javascript将JSON数据导出为Excle表格
  19. excel导出时 如何根据java后台返回的结果 动态实现excel复选框的勾选
  20. xml文件为什么在IE中打开为空白页

热门文章

  1. Windows服务器防火墙端口怎么开放?扬州服务器租用140.210.20.X
  2. 台式计算机用电量是多少,台式计算机的功率是多少?台式计算机多少电量[详细介绍]...
  3. matlab模拟土壤水分入渗,基于HYDRUS-3D的涌泉根灌土壤入渗数值模拟
  4. python迭代是什么意思_如何理解python中的迭代
  5. 数据库慢查询及其优化
  6. sql查询某个部门及其所以子部门信息
  7. Lua04 实例列举 ESB2CP的报文转换流程
  8. acwing----春季每日一题2022篇(二)
  9. 【C++】VSCode配置C++环境(详细教程)
  10. 百度京东加持的新潮传媒 已成为分众传媒最大的敌人