java 判断文件类型是否是音频_用java流方式判断文件类型
这个方法只能在有限的范围内有效。并不是万金油
比如
图片类型判断,音频文件格式判断,视频文件格式判断等这种肯定是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流方式判断文件类型相关推荐
- java无法访问封闭类型实例怎么解决_错误:无法访问OOPTutorial类型的封闭实例
我是Java新手,想要做一个简单的程序来帮助我进一步理解面向对象的编程. 我决定做一个电话程序.然而,在下面的程序的第5行,我试图创建一个电话类的实例,我收到以下错误: "不能使用OOPTu ...
- JAVA中计算五子棋平局的算法_输入五子棋棋盘判断输赢或平局—程序设计(C语言)...
输入五子棋棋盘判断输赢或平局-程序设计(C语言) 输入五子棋棋盘判断输赢或平局-程序设计(C语言) 输入五子棋棋盘判断输赢或平局-程序设计(C语言) ??做这道题实在没有思路参考了这位作者的代码: h ...
- java和c语言有关联吗_关于JAVA语言,和C语言有什么联系吗?
展开全部 Java语言由语法规则和类库两部分组成,其中语法规则确定了Java程序的书写规范,62616964757a686964616fe59b9ee7ad9431333337626264学习好语法规 ...
- java传统的项目有哪些内容_请问java全套内容都有什么呢?
我整理的Java全套内容学习路线,分为6个阶段(大阶段)第一阶段:java内功心法篇 第二阶段:Java武功秘籍(经典框架) 第三阶段:Java高级功法(主流框架) 第四阶段:Java成神之路 第五阶 ...
- java简单通讯录的实现02person类_用java实现简单的小游戏(你一定玩过)
用java实现简单的小游戏(你一定玩过) 对于java初学者来说,通过一些学习小游戏来对swing学习以及对java基础的学习是一个好的方法,同时也给学习带来了很多的乐趣,接下来就给大家分享一个jav ...
- java语言采用16位颜色标准_华为Java笔试题一
华为Java笔试题一 D.Servlet 2.下列说法正确的有( ) A. 环境变量可在编译source code时指定 B. 在编译程序时,所能指定的环境变量不包括class path C. jav ...
- java 中的finally你知多少_「JAVA」详述Java异常体系,处理异常时配上finally效果更佳...
什么是异常 从事Java开发的小伙伴对于"异常"应该不陌生,因为每天都会遇到不少异常,或捕获,或抛出.那究竟什么是异常?异常即非正常的,不同于平常.一般化的情况.在平时生活中,医生 ...
- java 怎么优雅的写出代码_【Java】基础50:如何让写的代码像诗一样优雅?
今天是刘小爱自学Java的第50天. 感谢你的观看,谢谢你. 话不多说,开始今天的学习: 一.Stream流引入 这个流和IO流中的流很容易弄混淆. 但是它们是两个完全不一样的概念,Stream流 ...
- java写一段程序代表心情_讨论java初步学习的方法及心情
Java的重要性 Java语言的三大特点,面向对象.良好的跨平台性和健壮性,这三大特点使Java被广大编程人员接收并且使用.Java的核心机制有Java虚拟机和垃圾回收机制这两种,Java虚拟机通过解 ...
最新文章
- 爬虫requests如何提取图片_如何提取图片上的文字(办公技巧)
- linux系统防火墙相关问题及常用命令介绍
- html属性选择器怎么写,html – 具有“type”属性与make-up属性的CSS属性选择器和区分大小写...
- 深入理解JVM(1)——Java内存区域与Java对象
- Harbor2.2.1配置(trivy扫描器、镜像签名)
- 已知c语言程序有主程序模块prog.c,嵌入式系统试卷--A卷
- 用NGUI做一个计时条!
- centos6.8安装oracle12C 详细步骤讲解
- Python——分布式监控项目
- 【动态规划】状压dp:蓝桥2020补给(旅行商问题)
- Oracle 过程中检查数据表存在与否
- 多个注解可以合并成一个,包括自定义注解
- 大学生网页设计课程大作业1
- 大数据,云计算和物联网,三者之间的关系是什么?
- python normalize函数_Python Pandas Series.dt.normalize用法及代码示例
- (十四)单词之各动词讲解
- 如何打开.pdm文件(Mac OS X)
- javascript将JSON数据导出为Excle表格
- excel导出时 如何根据java后台返回的结果 动态实现excel复选框的勾选
- xml文件为什么在IE中打开为空白页
热门文章
- Windows服务器防火墙端口怎么开放?扬州服务器租用140.210.20.X
- 台式计算机用电量是多少,台式计算机的功率是多少?台式计算机多少电量[详细介绍]...
- matlab模拟土壤水分入渗,基于HYDRUS-3D的涌泉根灌土壤入渗数值模拟
- python迭代是什么意思_如何理解python中的迭代
- 数据库慢查询及其优化
- sql查询某个部门及其所以子部门信息
- Lua04 实例列举 ESB2CP的报文转换流程
- acwing----春季每日一题2022篇(二)
- 【C++】VSCode配置C++环境(详细教程)
- 百度京东加持的新潮传媒 已成为分众传媒最大的敌人