最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 如何通過Magic 魔數(shù)獲取文件類型

 更新時(shí)間:2023年11月29日 10:27:38   作者:數(shù)媒派  
魔數(shù)有很多種定義,這里我們討論的主要是在編程領(lǐng)域的定義,文件的起始幾個(gè)字節(jié)的內(nèi)容是固定的,本文給大家介紹Java Magic 魔數(shù)獲取文件類型的相關(guān)知識(shí),感興趣的朋友一起看看吧

Magic 魔數(shù)獲取文件類型

魔數(shù)有很多種定義,這里我們討論的主要是在編程領(lǐng)域的定義,文件的起始幾個(gè)字節(jié)的內(nèi)容是固定的(或是有意填充,或是本就如此),這幾個(gè)字節(jié)的內(nèi)容也被稱為魔數(shù)(magic number),因此可以根據(jù)這幾個(gè)字節(jié)的內(nèi)容確定文件類型。

常見文件類型的魔數(shù)

public enum FileType {
    /**
     * JPEG
     */
    JPEG("JPEG", "FFD8FF"),
    /**
     * PNG
     */
    PNG("PNG", "89504E47"),
    /**
     * GIF
     */
    GIF("GIF", "47494638"),
    /**
     * TIFF
     */
    TIFF("TIFF", "49492A00"),
    /**
     * Windows bitmap
     */
    BMP("BMP", "424D"),
    /**
     * CAD
     */
    DWG("DWG", "41433130"),
    /**
     * Adobe photoshop
     */
    PSD("PSD", "38425053"),
    /**
     * Rich Text Format
     */
    RTF("RTF", "7B5C727466"),
    /**
     * XML
     */
    XML("XML", "3C3F786D6C"),
    /**
     * HTML
     */
    HTML("HTML", "68746D6C3E"),
    /**
     * Outlook Express
     */
    DBX("DBX", "CFAD12FEC5FD746F "),
    /**
     * Outlook
     */
    PST("PST", "2142444E"),
    /**
     * doc;xls;dot;ppt;xla;ppa;pps;pot;msi;sdw;db
     */
    OLE2("OLE2", "0xD0CF11E0A1B11AE1"),
    /**
     * Microsoft Word/Excel
     */
    XLS_DOC("XLS_DOC", "D0CF11E0"),
    /**
     * Microsoft Access
     */
    MDB("MDB", "5374616E64617264204A"),
    /**
     * Word Perfect
     */
    WPB("WPB", "FF575043"),
    /**
     * Postscript
     */
    EPS_PS("EPS_PS", "252150532D41646F6265"),
    /**
     * Adobe Acrobat
     */
    PDF("PDF", "255044462D312E"),
    /**
     * Windows Password
     */
    PWL("PWL", "E3828596"),
    /**
     * ZIP Archive
     */
    ZIP("ZIP", "504B0304"),
    /**
     * ARAR Archive
     */
    RAR("RAR", "52617221"),
    /**
     * WAVE
     */
    WAV("WAV", "57415645"),
    /**
     * AVI
     */
    AVI("AVI", "41564920"),
    /**
     * Real Audio
     */
    RAM("RAM", "2E7261FD"),
    /**
     * Real Media
     */
    RM("RM", "2E524D46"),
    /**
     * Quicktime
     */
    MOV("MOV", "6D6F6F76"),
    /**
     * Windows Media
     */
    ASF("ASF", "3026B2758E66CF11"),
    /**
     * MIDI
     */
    MID("MID", "4D546864");
    private String key;
    private String value;
    FileType(String key, String value) {
        this.key = key;
        this.value = value;
    }
    public String getValue() {
        return value;
    }
    public String getKey() {
         return key;
    }
}

文件類型工具類

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class FileUtil {
    /**
     * 獲取文件投
     *
     * @param filePath 文件路徑
     * @return 16 進(jìn)制的文件投信息
     * @throws IOException
     */
    private static String getFileHeader(String filePath) throws IOException {
        byte[] b = new byte[28];
        InputStream inputStream = new FileInputStream(filePath);
        inputStream.read(b, 0, 28);
        inputStream.close();
        return bytes2hex(b);
    }
    /**
     * 將字節(jié)數(shù)組轉(zhuǎn)換成16進(jìn)制字符串
     */
    private static String bytes2hex(byte[] src) {
        StringBuilder stringBuilder = new StringBuilder("");
        if (src == null || src.length <= 0) {
            return null;
        }
        for (byte b : src) {
            int v = b & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv);
        }
        return stringBuilder.toString();
    }
    /**
     * 根據(jù)文件路徑獲取文件類型
     *
     * @param filePath 文件路徑
     * @return 文件類型
     * @throws IOException
     */
    public static FileType getFileType(String filePath) throws IOException {
        String fileHead = getFileHeader(filePath);
        if (null == fileHead || fileHead.length() == 0) {
            return null;
        }
        fileHead = fileHead.toUpperCase();
        FileType[] fileTypes = FileType.values();
        for (FileType type : fileTypes) {
            if (fileHead.startsWith(type.getValue())) {
                return type;
            }
        }
        return null;
    }
}

使用

public static void main(String[] args) throws IOException {
    String filePath = "/Users/ziyou/Downloads/SpringBoot實(shí)戰(zhàn).png";
    FileType fileType = getFileType(filePath);
    System.out.println(fileType.getKey());
}

到此這篇關(guān)于Java Magic 魔數(shù)獲取文件類型的文章就介紹到這了,更多相關(guān)Java獲取文件類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java圖搜索算法之DFS與BFS詳解

    java圖搜索算法之DFS與BFS詳解

    這篇文章主要為大家介紹了java數(shù)據(jù)結(jié)構(gòu)中可以秒殺一切圖算法的DFS與BFS作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • Java編程使用UDP建立群聊系統(tǒng)代碼實(shí)例

    Java編程使用UDP建立群聊系統(tǒng)代碼實(shí)例

    這篇文章主要介紹了Java編程使用UDP建立群聊系統(tǒng)代碼實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2018-01-01
  • 通過代碼理解java泛型

    通過代碼理解java泛型

    本篇文章通過代碼實(shí)例讓大家充分的理解java泛型的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2018-08-08
  • Java中靜態(tài)代碼塊、構(gòu)造代碼塊、構(gòu)造函數(shù)和普通代碼塊的區(qū)別

    Java中靜態(tài)代碼塊、構(gòu)造代碼塊、構(gòu)造函數(shù)和普通代碼塊的區(qū)別

    在Java中,靜態(tài)代碼塊、構(gòu)造代碼塊、構(gòu)造函數(shù)、普通代碼塊的執(zhí)行順序是一個(gè)筆試的考點(diǎn),通過這篇文章希望大家能徹底了解它們之間的執(zhí)行順序,需要的朋友可以參考下
    2023-05-05
  • 再談java回調(diào)函數(shù)

    再談java回調(diào)函數(shù)

    個(gè)人對(duì)于回調(diào)函數(shù)的理解就是回調(diào)函數(shù)就是回頭再調(diào)用的函數(shù),哈哈,下面我們來詳細(xì)探討下回調(diào)函數(shù)。
    2015-07-07
  • Java開發(fā)利器之Guava?Cache的使用教程

    Java開發(fā)利器之Guava?Cache的使用教程

    緩存技術(shù)被認(rèn)為是減輕服務(wù)器負(fù)載、降低網(wǎng)絡(luò)擁塞、增強(qiáng)Web可擴(kuò)展性的有效途徑之一。今天咱們就來聊聊Guava?Cache本地緩存,感興趣的可以了解一下
    2022-09-09
  • JavaWeb中的路徑問題解讀

    JavaWeb中的路徑問題解讀

    這篇文章主要介紹了JavaWeb中的路徑問題解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • java中httpclient封裝post請(qǐng)求和get的請(qǐng)求實(shí)例

    java中httpclient封裝post請(qǐng)求和get的請(qǐng)求實(shí)例

    這篇文章主要介紹了java中httpclient封裝post請(qǐng)求和get的請(qǐng)求實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 使用Swagger2實(shí)現(xiàn)自動(dòng)生成RESTful?API文檔

    使用Swagger2實(shí)現(xiàn)自動(dòng)生成RESTful?API文檔

    在開發(fā)?RESTful?API?的過程中,文檔是非常重要的一部分,可以幫助開發(fā)者了解?API?的功能和使用方法,本文將使用Swagger2?實(shí)現(xiàn)自動(dòng)生成?RESTful?API?文檔,需要的可以參考一下
    2023-06-06
  • 解決@RequestBody接收json對(duì)象報(bào)錯(cuò)415的問題

    解決@RequestBody接收json對(duì)象報(bào)錯(cuò)415的問題

    這篇文章主要介紹了解決@RequestBody接收json對(duì)象報(bào)錯(cuò)415的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評(píng)論

安国市| 陆川县| 禹州市| 淄博市| 沾化县| 稻城县| 高安市| 新津县| 彰化县| 双牌县| 平舆县| 绥宁县| 进贤县| 通江县| 巴中市| 靖西县| 海淀区| 富源县| 丹阳市| 晋宁县| 砚山县| 固镇县| 沙洋县| 福鼎市| 高雄市| 宜宾县| 盐城市| 福安市| 延吉市| 尉氏县| 肥乡县| 林州市| 南投市| 屯昌县| 扶绥县| 甘谷县| 镇坪县| 龙山县| 新建县| 深州市| 商南县|