文件类型判断

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();    
    }    
}

 

posted @ 2024-07-29 16:18  yshy  阅读(3)  评论(0编辑  收藏  举报