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代码判断文件类型(判断文件后缀名)

1.两点需要注意 1.string.spilt("\\.")分割字符串成子字符串数组,以“.”分割,必须写成string.spilt("\\.")的方式,不能写 ...

java文件上传,自动判断文件类型

public enum FileType { /** * JEPG. */ JPEG("FFD8FF"), /** * PNG. */ PNG("89504E47&quo ...

Java判断文件类型

通常,在WEB系统中,上传文件时都需要做文件的类型校验,大致有如下几种方法: 1. 通过后缀名,如exe,jpg,bmp,rar,zip等等. 2. 通过读取文件,获取文件的Content-type来 ...

使用apache&period;tika判断文件类型

一. 判断文件类型一般可采用两种方式 1. 后缀名判断 简单易操作,但无法准确判断类型 2. 文件头信息判断 通常可以判断文件类型,但有些文件类型无法判断(如word和excel头信息的前几个字节是一 ...

Python之基于十六进制判断文件类型

核心代码: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : suk import struct from io import Byt ...

JavaScript根据文件名判断文件类型

//JavaScript根据文件名判断文件类型 var imgExt = new Array(".png",".jpg",".jpeg",& ...

利用PHP取二进制文件头判断文件类型

Linux中用st&lowbar;mode判断文件类型

Linux中用st_mode判断文件类型 2012-12-11 12:41 14214人阅读 评论(4) 收藏 举报  分类: Linux(8)  C/C++(20)  版权声明:本文为博主原创文章, ...

php 读取文件头判断文件类型的实现代码

php代码实现读取文件头判断文件类型,支持图片.rar.exe等后缀. 例子: <?php $filename = "11.jpg"; //为图片的路径可以用d:/uploa ...

随机推荐

SP2-0618&colon; 无法找到会话标识符。启用检查 PLUSTRACE 角色 SP2-0611&colon; 启用 STATISTICS 报告时出错

援引: SP2-0618: 无法找到会话标识符.启用检查 PLUSTRACE 角色 SP2-0611: 启用 STATISTICS 报告时出错 问题描述及解决方法: SQL*Plus: Release ...

globals&lpar;&rpar;

[globals() ] globals() Return a dictionary representing the current global symbol table. This is alw ...

&lbrack;Leetcode&rsqb; Wildcard Matching

Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character. ...

夺命雷公狗ThinkPHP项目之----企业网站7之栏目的修改(主要用模型来验证字段)

我们照老,在控制器里面先查出我们所需要用到的数据: 然后直接遍历到模版上即可: 然后再开始写提交过来的数据处理问题(注意一定要接收修改页面通过隐藏域)而且我们刚才已经写好我们的model层了,所以直接 ...

jquery基础教程读书总结

最近静下心来看书才深刻的体会到:看书真的很重要,只有看书才能让你有心思静下心来思考. 重温 一.事件 主要掌握常见的事件以及理解jquery的事件处理机制. 需要注 ...

jquey的 ajax请求的几种方式

在jquery中,提供了集中方法来进行ajax操作 一.$.get(url,[data],[callback]) 向服务器发起get操作. 说明:url为请求地址,data为请求数据的列表(json对 ...

HDU2089 暴力打表

62的判断就是倒过来没有26 hdu2089 #include #include #include #incl ...

24小时学通Linux内核总结篇&lpar;kconfig和Makefile &amp&semi; 讲不出再见&rpar;

非常开心能够和大家一起分享这些,让我受益匪浅,感激之情也溢于言表,,code monkey的话少,没办法煽情了,,,,,,,冬天的风,吹得伤怀,倒叙往事,褪成空白~学校的人越来越少了,就像那年我们小年 ...

&lbrack;编程&rsqb; TCP协议概述

TCP 协议概述 1.TCP提供一种面向连接的.可靠的字节流服务. 2.两个应用程序通过TCP连接交换8bit字节构成的字节流. 3.每个TCP首部都包含源端和目的端的端口号,用于寻找发端和收端应用进 ...

Linux搜索查找命令

Linux搜索查找指令 find,用于在文件树中查找文件并作相应的处理 -name:按照文件名查找文件 -perm:按照文件权限查找文件 -user:按照文件属主来查找文件 -size:按照指定的文件 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值