zoukankan      html  css  js  c++  java
  • 利用文件头来实现的一些文件类型的方法封装

    package com.opslab.util.algorithmImpl;

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;

    /**
    * 利用文件头来实现的一些文件类型的方法封装
    */
    public class FileTypeImpl {

    public final static Map<String,String> FILE_TYPE_MAP = new HashMap<String,String>();

    static {
    FILE_TYPE_MAP.put("jpg", "FFD8FF"); //JPEG (jpg)
    FILE_TYPE_MAP.put("png", "89504E47"); //PNG (png)
    FILE_TYPE_MAP.put("gif", "47494638"); //GIF (gif)
    FILE_TYPE_MAP.put("tif", "49492A00"); //TIFF (tif)
    FILE_TYPE_MAP.put("bmp", "424D"); //Windows Bitmap (bmp)
    FILE_TYPE_MAP.put("dwg", "41433130"); //CAD (dwg)
    FILE_TYPE_MAP.put("html", "68746D6C3E"); //HTML (html)
    FILE_TYPE_MAP.put("rtf", "7B5C727466"); //Rich Text Format (rtf)
    FILE_TYPE_MAP.put("xml", "3C3F786D6C");
    FILE_TYPE_MAP.put("zip", "504B0304");
    FILE_TYPE_MAP.put("rar", "52617221");
    FILE_TYPE_MAP.put("psd", "38425053"); //Photoshop (psd)
    FILE_TYPE_MAP.put("eml", "44656C69766572792D646174653A"); //Email [thorough only] (eml)
    FILE_TYPE_MAP.put("dbx", "CFAD12FEC5FD746F"); //Outlook Express (dbx)
    FILE_TYPE_MAP.put("pst", "2142444E"); //Outlook (pst)
    FILE_TYPE_MAP.put("xls", "D0CF11E0"); //MS Word
    FILE_TYPE_MAP.put("doc", "D0CF11E0"); //MS Excel 注意:word 和 excel的文件头一样
    FILE_TYPE_MAP.put("mdb", "5374616E64617264204A"); //MS Access (mdb)
    FILE_TYPE_MAP.put("wpd", "FF575043"); //WordPerfect (wpd)
    FILE_TYPE_MAP.put("eps", "252150532D41646F6265");
    FILE_TYPE_MAP.put("ps", "252150532D41646F6265");
    FILE_TYPE_MAP.put("pdf", "255044462D312E"); //Adobe Acrobat (pdf)
    FILE_TYPE_MAP.put("qdf", "AC9EBD8F"); //Quicken (qdf)
    FILE_TYPE_MAP.put("pwl", "E3828596"); //Windows Password (pwl)
    FILE_TYPE_MAP.put("wav", "57415645"); //Wave (wav)
    FILE_TYPE_MAP.put("avi", "41564920");
    FILE_TYPE_MAP.put("ram", "2E7261FD"); //Real Audio (ram)
    FILE_TYPE_MAP.put("rm", "2E524D46"); //Real Media (rm)
    FILE_TYPE_MAP.put("mpg", "000001BA"); //
    FILE_TYPE_MAP.put("mov", "6D6F6F76"); //Quicktime (mov)
    FILE_TYPE_MAP.put("asf", "3026B2758E66CF11"); //Windows Media (asf)
    FILE_TYPE_MAP.put("mid", "4D546864"); //MIDI (mid)
    }

    /**
    * Created on 2010-7-1
    * <p>Discription:[getFileByFile,获取文件类型,包括图片,若格式不是已配置的,则返回null]</p>
    *
    * @param file
    * @return fileType
    * @author:[shixing_11@sina.com]
    */
    public final static String getFileType(File file) {
    String filetype = null;
    byte[] b = new byte[50];
    try (
    InputStream is = new FileInputStream(file)
    ) {
    is.read(b);
    filetype = getFileTypeByStream(b);
    is.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    return filetype;
    }

    /**
    * Created on 2010-7-1
    * <p>Discription:[getFileTypeByStream]</p>
    *
    * @param b
    * @return fileType
    * @author:[shixing_11@sina.com]
    */
    public final static String getFileTypeByStream(byte[] b) {
    String filetypeHex = String.valueOf(getFileHexString(b));
    Iterator<Map.Entry<String,String>> entryiterator = FILE_TYPE_MAP.entrySet().iterator();
    while (entryiterator.hasNext()) {
    Map.Entry<String,String> entry = entryiterator.next();
    String fileTypeHexValue = entry.getValue();
    if (filetypeHex.toUpperCase().startsWith(fileTypeHexValue)) {
    return entry.getKey();
    }
    }
    return null;
    }

    /**
    * Created on 2010-7-1
    * <p>Discription:[getFileHexString]</p>
    *
    * @param b
    * @return fileTypeHex
    * @author:[shixing_11@sina.com]
    */
    public final static 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);
    }
    return stringBuilder.toString();
    }
    }

  • 相关阅读:
    Python模块之logging
    Python模块之configparser
    python序列化模块 json&&pickle&&shelve
    Python模块之hashlib
    最短路之Floyd(多源)HDU 1874
    Python类知识学习时的部分问题
    第9章 Python文件操作目录
    第8章 Python类中常用的特殊变量和方法目录
    第7章 Python类型、类、协议目录
    第6章 Python中的动态可执行方法目录
  • 原文地址:https://www.cnblogs.com/chinaifae/p/10254648.html
Copyright © 2011-2022 走看看