1. 程式人生 > >Android 判斷檔案的型別

Android 判斷檔案的型別


import java.util.HashMap;

import java.util.Iterator;



/**

 * 判斷檔案的型別

 */

public class MediaFileUtil
{

    //刪除地址引數,以免判斷型別是判斷失誤
    public static String removeParams(String url)
    {
        return url.replaceAll("\\?.*","");
    }

    public static String sFileExtensions;



    // Audio

    public static final int FILE_TYPE_MP3     = 1;

    public static final int FILE_TYPE_M4A     = 2;

    public static final int FILE_TYPE_WAV     = 3;

    public static final int FILE_TYPE_AMR     = 4;

    public static final int FILE_TYPE_AWB     = 5;

    public static final int FILE_TYPE_WMA     = 6;

    public static final int FILE_TYPE_OGG     = 7;

    private static final int FIRST_AUDIO_FILE_TYPE = FILE_TYPE_MP3;

    private static final int LAST_AUDIO_FILE_TYPE = FILE_TYPE_OGG;



    // MIDI

    public static final int FILE_TYPE_MID     = 11;

    public static final int FILE_TYPE_SMF     = 12;

    public static final int FILE_TYPE_IMY     = 13;

    private static final int FIRST_MIDI_FILE_TYPE = FILE_TYPE_MID;

    private static final int LAST_MIDI_FILE_TYPE = FILE_TYPE_IMY;



    // Video

    public static final int FILE_TYPE_MP4     = 21;

    public static final int FILE_TYPE_M4V     = 22;

    public static final int FILE_TYPE_3GPP    = 23;

    public static final int FILE_TYPE_3GPP2   = 24;

    public static final int FILE_TYPE_WMV     = 25;

    private static final int FIRST_VIDEO_FILE_TYPE = FILE_TYPE_MP4;

    private static final int LAST_VIDEO_FILE_TYPE = FILE_TYPE_WMV;



    // Image

    public static final int FILE_TYPE_JPEG    = 31;

    public static final int FILE_TYPE_GIF     = 32;

    public static final int FILE_TYPE_PNG     = 33;

    public static final int FILE_TYPE_BMP     = 34;

    public static final int FILE_TYPE_WBMP    = 35;

    private static final int FIRST_IMAGE_FILE_TYPE = FILE_TYPE_JPEG;

    private static final int LAST_IMAGE_FILE_TYPE = FILE_TYPE_WBMP;



    // Playlist

    public static final int FILE_TYPE_M3U     = 41;

    public static final int FILE_TYPE_PLS     = 42;

    public static final int FILE_TYPE_WPL     = 43;

    private static final int FIRST_PLAYLIST_FILE_TYPE = FILE_TYPE_M3U;

    private static final int LAST_PLAYLIST_FILE_TYPE = FILE_TYPE_WPL;



    //靜態內部類

    static class MediaFileType {



        int fileType;

        String mimeType;



        MediaFileType(int fileType, String mimeType) {

            this.fileType = fileType;

            this.mimeType = mimeType;

        }

    }



    private static HashMap<String, MediaFileType> sFileTypeMap

            = new HashMap<String, MediaFileType>();

    private static HashMap<String, Integer> sMimeTypeMap

            = new HashMap<String, Integer>();

    static void addFileType(String extension, int fileType, String mimeType) {

        sFileTypeMap.put(extension, new MediaFileType(fileType, mimeType));

        sMimeTypeMap.put(mimeType, new Integer(fileType));

    }

    static {

        addFileType("MP3", FILE_TYPE_MP3, "audio/mpeg");

        addFileType("M4A", FILE_TYPE_M4A, "audio/mp4");

        addFileType("WAV", FILE_TYPE_WAV, "audio/x-wav");

        addFileType("AMR", FILE_TYPE_AMR, "audio/amr");

        addFileType("AWB", FILE_TYPE_AWB, "audio/amr-wb");

        addFileType("WMA", FILE_TYPE_WMA, "audio/x-ms-wma");

        addFileType("OGG", FILE_TYPE_OGG, "application/ogg");



        addFileType("MID", FILE_TYPE_MID, "audio/midi");

        addFileType("XMF", FILE_TYPE_MID, "audio/midi");

        addFileType("RTTTL", FILE_TYPE_MID, "audio/midi");

        addFileType("SMF", FILE_TYPE_SMF, "audio/sp-midi");

        addFileType("IMY", FILE_TYPE_IMY, "audio/imelody");



        addFileType("MP4", FILE_TYPE_MP4, "video/mp4");

        addFileType("M4V", FILE_TYPE_M4V, "video/mp4");

        addFileType("3GP", FILE_TYPE_3GPP, "video/3gpp");

        addFileType("3GPP", FILE_TYPE_3GPP, "video/3gpp");

        addFileType("3G2", FILE_TYPE_3GPP2, "video/3gpp2");

        addFileType("3GPP2", FILE_TYPE_3GPP2, "video/3gpp2");

        addFileType("WMV", FILE_TYPE_WMV, "video/x-ms-wmv");



        addFileType("JPG", FILE_TYPE_JPEG, "image/jpeg");

        addFileType("JPEG", FILE_TYPE_JPEG, "image/jpeg");

        addFileType("GIF", FILE_TYPE_GIF, "image/gif");

        addFileType("PNG", FILE_TYPE_PNG, "image/png");

        addFileType("BMP", FILE_TYPE_BMP, "image/x-ms-bmp");

        addFileType("WBMP", FILE_TYPE_WBMP, "image/vnd.wap.wbmp");



        addFileType("M3U", FILE_TYPE_M3U, "audio/x-mpegurl");

        addFileType("PLS", FILE_TYPE_PLS, "audio/x-scpls");

        addFileType("WPL", FILE_TYPE_WPL, "application/vnd.ms-wpl");



        // compute file extensions list for native Media Scanner

        StringBuilder builder = new StringBuilder();

        Iterator<String> iterator = sFileTypeMap.keySet().iterator();



        while (iterator.hasNext()) {

            if (builder.length() > 0) {

                builder.append(',');

            }

            builder.append(iterator.next());

        }

        sFileExtensions = builder.toString();

    }



    public static final String UNKNOWN_STRING = "<unknown>";



    public static boolean isAudioFileType(int fileType) {

        return ((fileType >= FIRST_AUDIO_FILE_TYPE &&

                fileType <= LAST_AUDIO_FILE_TYPE) ||

                (fileType >= FIRST_MIDI_FILE_TYPE &&

                        fileType <= LAST_MIDI_FILE_TYPE));

    }



    public static boolean isVideoFileType(int fileType) {

        return (fileType >= FIRST_VIDEO_FILE_TYPE &&

                fileType <= LAST_VIDEO_FILE_TYPE);

    }



    public static boolean isImageFileType(int fileType) {

        return (fileType >= FIRST_IMAGE_FILE_TYPE &&

                fileType <= LAST_IMAGE_FILE_TYPE);

    }



    public static boolean isPlayListFileType(int fileType) {

        return (fileType >= FIRST_PLAYLIST_FILE_TYPE &&

                fileType <= LAST_PLAYLIST_FILE_TYPE);

    }



    public static MediaFileType getFileType(String path) {

        int lastDot = path.lastIndexOf(".");

        if (lastDot < 0)

            return null;

        return sFileTypeMap.get(path.substring(lastDot + 1).toUpperCase());

    }



    //根據視訊檔案路徑判斷檔案型別

    public static boolean isVideoFileType(String path) {

        MediaFileType type = getFileType(path);

        if(null != type) {

            return isVideoFileType(type.fileType);

        }

        return false;

    }



    //根據音訊檔案路徑判斷檔案型別

    public static boolean isAudioFileType(String path) {

        MediaFileType type = getFileType(path);

        if(null != type) {

            return isAudioFileType(type.fileType);

        }

        return false;

    }



    //根據mime型別檢視檔案型別

    public static int getFileTypeForMimeType(String mimeType) {

        Integer value = sMimeTypeMap.get(mimeType);

        return (value == null ? 0 : value.intValue());

    }



    //根據圖片檔案路徑判斷檔案型別

    public static boolean isImageFileType(String path) {

        MediaFileType type = getFileType(path);

        if(null != type) {

            return isImageFileType(type.fileType);

        }

        return false;

    }

}

注:帶有引數的url需要先呼叫removeParams函式來去掉引數再進行判斷