Java教程

Java 判断文件类型,文件格式,非后缀名的方式

本文主要是介绍Java 判断文件类型,文件格式,非后缀名的方式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

用非后缀名方式判断文件类型,文件格式,使用的业务场景不再详细描述了,直接上实现方法(使用者可以进行优化改造);

1、创建文件类型枚举:

 

package com.shsnc.dbtdemo.common.enums;

/**
 * 文件类型枚举(部分为自定义类型)
 *
 * @author klp
 * @date 2022-06-24
 */
public enum FileTypeEnum {

    /**
     * JEPG.
     */
    JPEG("FFD8FF"),


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


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


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

    /**
     * RTF.
     */
    RTF("7B5C727466"),
    /**
     * DOC
     */
    DOC("D0CF11E0"),
    /**
     * XLS
     */
    XLS("D0CF11E0"),
    /**
     * ACCESS
     */
    MDB("5374616E64617264204A"),

    /**
     * WordPerfect
     */
    WPD("FF575043"),


    /**
     * WordPerfect
     */
    EPS("252150532D41646F6265"),

    /**
     * PS
     */
    PS("252150532D41646F6265"),

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


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


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

    /**
     * Email [thorough only]
     */
    EML("44656C69766572792D646174653A"),

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

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

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

    /**
     * office类型,包括doc、xls和ppt
     */
    OFFICE("D0CF11E0"),

    /**
     * HTML.
     */
    HTML("68746D6C3E"),


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


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

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


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


    /**
     * RAR Archive.
     */
    RAR("52617221"),


    /**
     * Wave.
     */
    WAV("57415645"),


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

    /**
     * Real Audio
     */
    RAM("2E7261FD"),
    /**
     * Real Media
     */
    RM("2E524D46"),
    /**
     * MPG
     */
    MPG("000001BA"),
    /**
     * Quicktime
     */
    MOV("6D6F6F76"),
    /**
     * Windows Media
     */
    ASF("3026B2758E66CF11"),
    /**
     * MIDI (mid)
     */
    MID("4D546864"),
    /**
     * EXE
     */
    EXE("4d5a");

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


2、判断方法:

/**
 * 检查文件类型
 *
 * @param inputStream
 * @return
 * @throws IOException
 */
public static boolean checkFileType(InputStream inputStream) throws IOException {
    byte[] b = new byte[28];//这里需要注意的是,每个文件的magic word的长度都不相同,因此需要使用startwith
    inputStream.read(b, 0, 28);
    inputStream.close();
    String fileHead = bytes2hex(b);
    fileHead = fileHead.toUpperCase();
    FileTypeEnum[] fileTypeEnums = FileTypeEnum.values();
    for (FileTypeEnum type : fileTypeEnums) {
        if (fileHead.startsWith(type.getValue())) {
            return true;
        }
    }
    return false;
}



/**
 * 二进制转化为16进制
 */
private static String bytes2hex(byte[] bytes) {
    StringBuilder hex = new StringBuilder();
    for (int i = 0; i < bytes.length; i++) {
        String temp = Integer.toHexString(bytes[i] & 0xFF);
        if (temp.length() == 1) {
            hex.append("0");
        }
        hex.append(temp.toLowerCase());
    }
    return hex.toString();
}




 

  
这篇关于Java 判断文件类型,文件格式,非后缀名的方式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!