件头是位于文件开头的一段承担一定任务的数据一般都在开头的部分头文件作为一种包含功能函数数据接口声明的载体文件用于保存程序的声明(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)
}
}