package javaapplication25;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.io.IOUtils;
/**
*
* @author YSHY
*/
public class FileTypeUtil {
public final static Map<String, String> FILE_TYPE_MAP = new HashMap<String, String>();
private FileTypeUtil(){}
static{
getAllFileType(); //初始化文件类型信息
}
//doc,docx,xls,xlsx,pat,et,ett,wpt,ofd,ppt,pdf,pptx,wps
private static void getAllFileType(){
FILE_TYPE_MAP.put("doc", "D0CF11E0");
FILE_TYPE_MAP.put("docx", "504B0304");
FILE_TYPE_MAP.put("xls", "D0CF11E0");
FILE_TYPE_MAP.put("xlsx", "504B0304");
FILE_TYPE_MAP.put("et", "D0CF11E0");
FILE_TYPE_MAP.put("ett", "D0CF11E0");
FILE_TYPE_MAP.put("wpt", "D0CF11E0");
FILE_TYPE_MAP.put("ofd", "504B0304");
FILE_TYPE_MAP.put("ppt", "D0CF11E0");
FILE_TYPE_MAP.put("pdf", "255044462D312E");
FILE_TYPE_MAP.put("pptx", "504B0304");
FILE_TYPE_MAP.put("wps", "D0CF11E0");
FILE_TYPE_MAP.put("pat", "3B20E8BF99E"); //待核实
}
/**
* 根据文件流获取文件类型并判断是否存在
* @param fileExeType
* @param is
* @return
*/
public static final boolean adjustFileType(String fileExeType, InputStream is) throws IOException {
byte[] b = IOUtils.toByteArray(is);
String filetypeHex = String.valueOf(getFileHexString(b));
System.out.println(fileExeType+",filetypeHex=>"+filetypeHex.toUpperCase());
return filetypeHex.toUpperCase().startsWith(FILE_TYPE_MAP.get(fileExeType));
}
public static final String getFileHexString(byte[] b) {
StringBuilder stringBuilder = new StringBuilder();
if (b == null || b.length <= 0)
{
return null;
}
for (int i = 0; i < b.length; i++)
{
int v = b[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2)
{
stringBuilder.append(0);
}
stringBuilder.append(hv);
if(i>20){
break;
}
}
return stringBuilder.toString();
}
}