java

位置:IT落伍者 >> java >> 浏览文章

Java根据文件头获取文件类型


发布日期:2018年09月19日
 
Java根据文件头获取文件类型

件头是位于文件开头的一段承担一定任务的数据一般都在开头的部分头文件作为一种包含功能函数数据接口声明的载体文件用于保存程序的声明(declaration)而定义文件用于保存程序的实现 (implementation)

为了解决在用户上传文件的时候在服务器端判断文件类型的问题故用获取文件头的方式直接读取文件的前几个字节来判断上传文件是否符合格式具体代码如下

Java代码 :

package comtestdayio;

import javaioFileInputStream;

import javaioIOException;

import javautilHashMap;

/**

* 获取和判断文件头信息

*

* @author bigbird

*

*/

public class FileType {

//缓存文件头信息文件头信息

public static final HashMap<String String> mFileTypes = new HashMap<String String>()

static {

// images

mFileTypesput(FFDFF jpg

mFileTypesput(E png

mFileTypesput( gif

mFileTypesput(A tif

mFileTypesput(D bmp

//

mFileTypesput( dwg // CAD

mFileTypesput( psd

mFileTypesput(BC rtf // 日记本

mFileTypesput(CFDC xml

mFileTypesput(DCE html

mFileTypesput(CDA eml // 邮件

mFileTypesput(DCFE doc

mFileTypesput(EA mdb

mFileTypesput(DF ps

mFileTypesput(DE pdf

mFileTypesput(B docx

mFileTypesput( rar

mFileTypesput( wav

mFileTypesput( avi

mFileTypesput(ED rm

mFileTypesput(BA mpg

mFileTypesput(B mpg

mFileTypesput(DFF mov

mFileTypesput(BECF asf

mFileTypesput(D mid

mFileTypesput(FB gz

mFileTypesput(

mFileTypesput(

}

/**

* 根据文件路径获取文件头信息

*

* @param filePath

* 文件路径

* @return 文件头信息

*/

public static String getFileType(String filePath) {

return mFileTypesget(getFileHeader(filePath))

}

/**

* 根据文件路径获取文件头信息

*

* @param filePath

* 文件路径

* @return 文件头信息

*/

public static String getFileHeader(String filePath) {

FileInputStream is = null;

String value = null;

try {

is = new FileInputStream(filePath)

byte[] b = new byte[];

isread(b blength)

value = bytesToHexString(b)

} catch (Exception e) {

} finally {

if (null != is) {

try {

isclose()

} catch (IOException e) {

}

}

}

return value;

}

/**

* 将要读取文件头信息的文件的byte数组转换成string类型表示

*

* @param src

* 要读取文件头信息的文件的byte数组

* @return 文件头信息

*/

private static String bytesToHexString(byte[] src) {

StringBuilder builder = new StringBuilder()

if (src == null || srclength <= ) {

return null;

}

String hv;

for (int i = ; i < srclength; i++) {

// 以十六进制(基数 )无符号整数形式返回一个整数参数的字符串表示形式并转换为大写

hv = IntegertoHexString(src[i] & xFF)toUpperCase()

if (hvlength() < ) {

builderappend(

}

builderappend(hv)

}

return buildertoString()

}

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

final String fileType = getFileType(E:/读书笔记/Java编程思想读书笔记docx

Systemoutprintln(fileType)

}

}

               

上一篇:Java中根据模板导出数据到word的解决方案

下一篇:Java程序性能优化(1)