import java.io.*;importjava.util.HashMap;public classGetFileType {//缓存文件头信息-文件头信息
public static final HashMap mFileTypes = new HashMap();static{
mFileTypes.put("FFD8FFE0","jpg");
mFileTypes.put("89504E47","png");
mFileTypes.put("424DC6CC","bmp");
mFileTypes.put("47494638","gif");
}/*** 根据文件路径获取文件头信息
*
*@paramfilePath 文件路径
*@return文件头信息*/
public staticString getFileType(String filePath) {
String type=getFileHeader(filePath);
System.out.println(type);returnmFileTypes.get(type);
}/*** 根据文件路径获取文件头信息
*
*@paramfilePath 文件路径
*@return文件头信息*/
public staticString getFileHeader(String filePath) {
FileInputStream is= null;
String value= null;try{
is= newFileInputStream(filePath);byte[] b = new byte[4];/** int read() 从此输入流中读取一个数据字节。 int read(byte[] b) 从此输入流中将最多 b.length
* 个字节的数据读入一个 byte 数组中。 int read(byte[] b, int off, int len)
* 从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。*/is.read(b,0, b.length);
value=bytesToHexString(b);
}catch(Exception e) {
}finally{if (null !=is) {try{
is.close();
}catch(IOException e) {
}
}
}returnvalue;
}/*** 将要读取文件头信息的文件的byte数组转换成string类型表示
*
*@paramsrc 要读取文件头信息的文件的byte数组
*@return文件头信息*/
private static String bytesToHexString(byte[] src) {
StringBuilder builder= newStringBuilder();if (src == null || src.length <= 0) {return null;
}
String hv;for (int i = 0; i < src.length; i++) {//以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式,并转换为大写
hv = Integer.toHexString(src[i] & 0xFF).toUpperCase();if (hv.length() < 2) {
builder.append(0);
}
builder.append(hv);
}returnbuilder.toString();
}public static voidmain(String[] args) {
String path= "E:/file/2.png";
String type=getFileType(path);
System.out.println(type);
path= "E:/file/timg.jpg";
type=getFileType(path);
System.out.println(type);
path= "E:/file/bmp.bmp";
type=getFileType(path);
System.out.println(type);
path= "E:/file/winter.gif";
type=getFileType(path);
System.out.println(type);
}
}