java 判断上传文件类型

工作中遇到了要把上传的文件进行分类显示,所以按文件后缀名进行分类。

枚举类:

package com.dws.emums;

/**
 * 文件类型
 * @author pc
 *
 */
public enum FileTypeEnum {
    /**
     * JEPG.
     */
    JPEG("FFD8FF"),

    /**
     * PNG.
     */
    PNG("89504E47"),

    /**
     * GIF.
     */
    GIF("47494638"),

    /**
     * TIFF.
     */
    TIFF("49492A00"),

    /**
     * Windows Bitmap.
     */
    BMP("424D"),

    /**
     * CAD.
     */
    DWG("41433130"),

    /**
     * Adobe Photoshop.
     */
    PSD("38425053"),

    /**
     * Rich Text Format.
     */
    RTF("7B5C727466"),

    /**
     * XML.
     */
    XML("3C3F786D6C"),

    /**
     * HTML.
     */
    HTML("68746D6C3E"),
    /**
     * CSS.
     */
    CSS("48544D4C207B0D0A0942"),
    /**
     * JS.
     */
    JS("696B2E71623D696B2E71"),
    /**
     * Email [thorough only].
     */
    EML("44656C69766572792D646174653A"),

    /**
     * Outlook Express.
     */
    DBX("CFAD12FEC5FD746F"),

    /**
     * Outlook (pst).
     */
    PST("2142444E"),

    /**
     * MS Word/Excel.
     */
    XLS_DOC("D0CF11E0"), XLSX_DOCX("504B030414000600080000002100"),
    /**
     * Visio
     */
    VSD("d0cf11e0a1b11ae10000"),
    /**
     * MS Access.
     */
    MDB("5374616E64617264204A"),
    /**
     * WPS文字wps、表格et、演示dps都是一样的
     */
    WPS("d0cf11e0a1b11ae10000"),
    /**
     * torrent
     */
    TORRENT("6431303A637265617465"),
    /**
     * WordPerfect.
     */
    WPD("FF575043"),

    /**
     * Postscript.
     */
    EPS("252150532D41646F6265"),

    /**
     * Adobe Acrobat.
     */
    PDF("255044462D312E"),

    /**
     * Quicken.
     */
    QDF("AC9EBD8F"),

    /**
     * Windows Password.
     */
    PWL("E3828596"),

    /**
     * ZIP Archive.
     */
    ZIP("504B0304"),

    /**
     * RAR Archive.
     */
    RAR("52617221"),
    /**
     * JSP Archive.
     */
    JSP("3C2540207061676520"),
    /**
     * JAVA Archive.
     */
    JAVA("7061636B61676520"),
    /**
     * CLASS Archive.
     */
    CLASS("CAFEBABE0000002E00"),
    /**
     * JAR Archive.
     */
    JAR("504B03040A000000"),
    /**
     * MF Archive.
     */
    MF("4D616E69666573742D56"),
    /**
     *EXE Archive.
     */
    EXE("4D5A9000030000000400"),
    /**
     *CHM Archive.
     */
    CHM("49545346030000006000"),
    /*
     * INI("235468697320636F6E66"), SQL("494E5345525420494E54"), BAT(
     * "406563686F206f66660D"), GZ("1F8B0800000000000000"), PROPERTIES(
     * "6C6F67346A2E726F6F74"), MXP(
     * "04000000010000001300"),
     */
    /**
     * Wave.
     */
    WAV("57415645"),

    /**
     * AVI.
     */
    AVI("41564920"),

    /**
     * Real Audio.
     */
    RAM("2E7261FD"),

    /**
     * Real Media.
     */
    RM("2E524D46"),

    /**
     * MPEG (mpg).
     */
    MPG("000001BA"),

    /**
     * Quicktime.
     */
    MOV("6D6F6F76"),

    /**
     * Windows Media.
     */
    ASF("3026B2758E66CF11"),

    /**
     * MIDI.
     */
    MID("4D546864"),
    /**
     * MP4.
     */
    MP4("00000020667479706973"),
    /**
     * MP3.
     */
    MP3("49443303000000000022"),
    /**
     * FLV.
     */
    FLV("464C5601050000000900");
    private String value = "";

    /**
     * Constructor.
     *
     * @param value
     */
    private FileTypeEnum(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}

文件类型判断类:

package com.dws.utils;

import com.dws.emums.FileTypeEnum;
import org.springframework.stereotype.Component;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * 文件类型判断
 */
@Component
public class FileTypeEnumJudgeUtil {
    /**
     * Constructor
     */
    private FileTypeEnumJudgeUtil() {
    }

    /**
     * 将文件头转换成16进制字符串
     *
     * 参数 原生byte
     * @return 16进制字符串
     */
    private static String bytesToHexString(byte[] src) {

        StringBuilder stringBuilder = new StringBuilder();
        if (src == null || src.length <= 0) {
            return null;
        }
        for (int i = 0; i < src.length; i++) {
            int v = src[i] & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv);
        }
        return stringBuilder.toString();
    }

    /**
     * 得到文件头
     *
     * @return 文件头
     * @throws IOException
     */
    private static String getFileContent(InputStream is) throws IOException {

        byte[] b = new byte[28];

        InputStream inputStream = null;

        try {
            is.read(b, 0, 28);
        } catch (IOException e) {
            e.printStackTrace();
            throw e;
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                    throw e;
                }
            }
        }
        return bytesToHexString(b);
    }

    /**
     * 判断文件类型
     *
     * @return 文件类型
     */
    public static FileTypeEnum getType(InputStream is) throws IOException {

        String fileHead = getFileContent(is);
        if (fileHead == null || fileHead.length() == 0) {
            return null;
        }
        fileHead = fileHead.toUpperCase();
        FileTypeEnum[] FileTypeEnums = FileTypeEnum.values();

        for (FileTypeEnum type : FileTypeEnums) {
            if (fileHead.startsWith(type.getValue())) {
                return type;
            }
        }

        return null;
    }
    /**
     *
     * @param value 表示文件类型
     * @return 1 表示图片,2 表示视频,3 表示文档,4 表示种子,5 表示音乐,7 表示其它
     * @return
     */
    public static Integer isFileTypeEnum(FileTypeEnum value) {
        Integer type = 7;// 其他
        // 图片
        FileTypeEnum[] pics = { FileTypeEnum.JPEG, FileTypeEnum.PNG, FileTypeEnum.GIF, FileTypeEnum.TIFF, FileTypeEnum.BMP, FileTypeEnum.DWG, FileTypeEnum.PSD };

        //文件
        FileTypeEnum[] docs = { FileTypeEnum.RTF, FileTypeEnum.XML, FileTypeEnum.HTML, FileTypeEnum.CSS, FileTypeEnum.JS, FileTypeEnum.EML, FileTypeEnum.DBX, FileTypeEnum.PST, FileTypeEnum.XLS_DOC, FileTypeEnum.XLSX_DOCX, FileTypeEnum.VSD,
                FileTypeEnum.MDB, FileTypeEnum.WPS, FileTypeEnum.WPD, FileTypeEnum.EPS, FileTypeEnum.PDF, FileTypeEnum.QDF, FileTypeEnum.PWL, FileTypeEnum.ZIP, FileTypeEnum.RAR, FileTypeEnum.JSP, FileTypeEnum.JAVA, FileTypeEnum.CLASS,
                FileTypeEnum.JAR, FileTypeEnum.MF, FileTypeEnum.EXE, FileTypeEnum.CHM };

        //视频
        FileTypeEnum[] videos = { FileTypeEnum.AVI, FileTypeEnum.RAM, FileTypeEnum.RM, FileTypeEnum.MPG, FileTypeEnum.MOV, FileTypeEnum.ASF, FileTypeEnum.MP4, FileTypeEnum.FLV, FileTypeEnum.MID };

        //种子
        FileTypeEnum[] tottents = { FileTypeEnum.TORRENT };

        //音乐
        FileTypeEnum[] audios = { FileTypeEnum.WAV, FileTypeEnum.MP3 };

        FileTypeEnum[] others = {};

        // 图片
        for (FileTypeEnum FileTypeEnum : pics) {
            if (FileTypeEnum.equals(value)) {
                type = 1;
            }
        }
        // 视频
        for (FileTypeEnum FileTypeEnum : videos) {
            if (FileTypeEnum.equals(value)) {
                type = 2;
            }
        }
        // 文档
        for (FileTypeEnum FileTypeEnum : docs) {
            if (FileTypeEnum.equals(value)) {
                type = 3;
            }
        }
        // 种子
        for (FileTypeEnum FileTypeEnum : tottents) {
            if (FileTypeEnum.equals(value)) {
                type = 4;
            }
        }
        // 音乐
        for (FileTypeEnum FileTypeEnum : audios) {
            if (FileTypeEnum.equals(value)) {
                type = 5;
            }
        }
        return type;
    }

    public static void main(String args[]) throws Exception {
        System.out.println(FileTypeEnumJudgeUtil.isFileTypeEnum(FileTypeEnumJudgeUtil.getType(new FileInputStream(new File("D:\\myFile\\测试文件\\一起走过的日子-刘德华.mp3")))));
    }
}

参考文章:

java判断上传文件类型(笔记)_java怎么判断文件是图片还是视频-CSDN博客

你可能感兴趣的:(Java,java,开发语言)