文件类型判断
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(); } }