文件類型全稱及獲取

文件類型太多了,大多記不清,所以做個記錄

    private static Map<String, String> MIME_MAP = new HashMap<>();

    static {
        MIME_MAP.put(".3gp", "video/3gpp");
        MIME_MAP.put(".apk", "application/vnd.android.package-archive");
        MIME_MAP.put(".asf", "video/x-ms-asf");
        MIME_MAP.put(".avi", "video/x-msvideo");
        MIME_MAP.put(".bin", "application/octet-stream");
        MIME_MAP.put(".bmp", "image/bmp");
        MIME_MAP.put(".c", "text/plain");
        MIME_MAP.put(".class", "application/octet-stream");
        MIME_MAP.put(".conf", "text/plain");
        MIME_MAP.put(".cpp", "text/plain");
        MIME_MAP.put(".doc", "application/msword");
        MIME_MAP.put(".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
        MIME_MAP.put(".xls", "application/vnd.ms-excel");
        MIME_MAP.put(".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        MIME_MAP.put(".exe", "application/octet-stream");
        MIME_MAP.put(".gif", "image/gif");
        MIME_MAP.put(".gtar", "application/x-gtar");
        MIME_MAP.put(".gz", "application/x-gzip");
        MIME_MAP.put(".h", "text/plain");
        MIME_MAP.put(".htm", "text/html");
        MIME_MAP.put(".html", "text/html");
        MIME_MAP.put(".jar", "application/java-archive");
        MIME_MAP.put(".java", "text/plain");
        MIME_MAP.put(".jpeg", "image/jpeg");
        MIME_MAP.put(".jpg", "image/jpeg");
        MIME_MAP.put(".js", "application/x-javascript");
        MIME_MAP.put(".log", "text/plain");
        MIME_MAP.put(".m3u", "audio/x-mpegurl");
        MIME_MAP.put(".m4a", "audio/mp4a-latm");
        MIME_MAP.put(".m4b", "audio/mp4a-latm");
        MIME_MAP.put(".m4p", "audio/mp4a-latm");
        MIME_MAP.put(".m4u", "video/vnd.mpegurl");
        MIME_MAP.put(".m4v", "video/x-m4v");
        MIME_MAP.put(".mov", "video/quicktime");
        MIME_MAP.put(".mp2", "audio/x-mpeg");
        MIME_MAP.put(".mp3", "audio/x-mpeg");
        MIME_MAP.put(".mp4", "video/mp4");
        MIME_MAP.put(".mpc", "application/vnd.mpohun.certificate");
        MIME_MAP.put(".mpe", "video/mpeg");
        MIME_MAP.put(".mpeg", "video/mpeg");
        MIME_MAP.put(".mpg", "video/mpeg");
        MIME_MAP.put(".mpg4", "video/mp4");
        MIME_MAP.put(".mpga", "audio/mpeg");
        MIME_MAP.put(".msg", "application/vnd.ms-outlook");
        MIME_MAP.put(".ogg", "audio/ogg");
        MIME_MAP.put(".pdf", "application/pdf");
        MIME_MAP.put(".png", "image/png");
        MIME_MAP.put(".pps", "application/vnd.ms-powerpoint");
        MIME_MAP.put(".ppt", "application/vnd.ms-powerpoint");
        MIME_MAP.put(".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation");
        MIME_MAP.put(".prop", "text/plain");
        MIME_MAP.put(".rc", "text/plain");
        MIME_MAP.put(".rmvb", "audio/x-pn-realaudio");
        MIME_MAP.put(".rtf", "application/rtf");
        MIME_MAP.put(".sh", "text/plain");
        MIME_MAP.put(".tar", "application/x-tar");
        MIME_MAP.put(".tgz", "application/x-compressed");
        MIME_MAP.put(".txt", "text/plain");
        MIME_MAP.put(".wav", "audio/x-wav");
        MIME_MAP.put(".wma", "audio/x-ms-wma");
        MIME_MAP.put(".wmv", "audio/x-ms-wmv");
        MIME_MAP.put(".wps", "application/vnd.ms-works");
        MIME_MAP.put(".xml", "text/plain");
        MIME_MAP.put(".z", "application/x-compress");
        MIME_MAP.put(".zip", "application/x-zip-compressed");
    }

 

讀取文件類型:

public static String getMimeTypeFromFile(File file) {
        String type = "*/*";
        String fName = file.getName();
        //獲取後綴名前的分隔符"."在fName中的位置。
        int dotIndex = fName.lastIndexOf(".");
        if (dotIndex > 0) {
            //獲取文件的後綴名
            String end = fName.substring(dotIndex).toLowerCase(Locale.getDefault());
            //在MIME和文件類型的匹配表中找到對應的MIME類型。
            String MIME = MIME_MAP.get(end);
            if (!TextUtils.isEmpty(MIME)) {
                type = MIME;
            }
        }
        return type;
    }

文件工具類:


import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.support.v4.content.FileProvider;
import android.text.TextUtils;
import android.text.format.Formatter;
import android.util.Log;

import com.cmct.libcommon.Constants.Constants;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.StringTokenizer;

public class FileUtil {

    //    public static final String APP_CACHE_DIR = "/zdit";
    public static final String DATA_CACHE_DIR = "/cache/";// 存放數據緩存文件,如json數據等
    public static final String IMAGE_CACHE_DIR = "/images";// 存放圖片文件緩存文件
    public static final String CRASH_CACHE_DIR = "/crash"; // 程序崩潰日誌
    public static final String DOWNLOAD_CACHE_DIR = "/download";// 存放下載的apk
    public static final String TAKE_PHOTO = "/照片";//拍照存放地址
    public static final String VIDEO = "/video"; //video 存放地址
    public static final String AUDIO = "/audio"; //audio 存放地址

    public static final String FLASH_CACHE_DIR = "flashconfigure";

    /**
     * 檢測Sdcard是否存在
     *
     * @return
     */
    public static boolean isExitsSdcard() {
        return android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
    }

    /**
     * 初始化緩存文件路徑
     */
    public static void prepareDir() {
        File dataCache = new File(getDataCachePath());
        if (!dataCache.exists()) {
            dataCache.mkdirs();
        }
        File imageCache = new File(getImageCachePath());
        if (!imageCache.exists()) {
            imageCache.mkdirs();
        }
        File crashCache = new File(getCrashCachePath());
        if (!crashCache.exists()) {
            crashCache.mkdirs();
        }
        File downloadCache = new File(getDownloadCachePath());
        if (!downloadCache.exists()) {
            downloadCache.mkdirs();
        }
    }

    public static String getFlashDataCache() {
        return getDataCachePath() + FLASH_CACHE_DIR;
    }

    public static String getAppCachePath() {
        return Constants.PATH_CACHE;
    }

    public static String getDataCachePath() {
        return getAppCachePath() + DATA_CACHE_DIR;
    }

    public static String getImageCachePath() {
        return getAppCachePath() + IMAGE_CACHE_DIR;
    }

    public static String getCrashCachePath() {
        return getAppCachePath() + CRASH_CACHE_DIR;
    }

    public static String getDownloadCachePath() {
        return getAppCachePath() + DOWNLOAD_CACHE_DIR;
    }

    public static String getPhotoPath() {
        return getAppCachePath() + TAKE_PHOTO;
    }

    public static String getVideoPath() {
        return getAppCachePath() + VIDEO;
    }


    public static String getAudioPath() {
        return getAppCachePath() + AUDIO;
    }

    /**
     * 判斷sd卡是否存在
     *
     * @return
     */
    public boolean isSDCardExist() {
        return android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
    }

    /**
     * 判斷文件夾是否存在 , 若不存在 則創建
     *
     * @param path
     * @return
     */
    public void isExists(String path) {

        StringTokenizer st = new StringTokenizer(path, "/");
        String path1 = st.nextToken() + "/";
        String path2 = path1;
        while (st.hasMoreTokens()) {
            path1 = st.nextToken() + "/";
            path2 += path1;
            File inbox = new File(path2);
            if (!inbox.exists())
                inbox.mkdir();
        }
    }

//    /**
//     * @param fileName
//     */
//    public static String readFileByLines(String fileName) {
//        String layout = "";
//        try {
//            FileInputStream fin = new FileInputStream(fileName);
//            int length = fin.available();
//            byte[] buffer = new byte[length + 1024];
//            fin.read(buffer);
//            layout = EncodingUtils.getString(buffer, "UTF-8");
//            fin.close();
//        } catch (Exception e) {
//            e.printStackTrace();
//            return "";
//        }
//        return layout.trim();
//    }

    public static void cacheStringToFile(String str, String filename) {
        File f = new File(filename);
        if (f.exists()) {
            f.delete();
        }
        try {
            f.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            FileOutputStream fos = new FileOutputStream(f, true);
            fos.write(str.getBytes());
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static long getFileSize(String path) {
        File file = new File(path);
        long s = 0;
        if (file.exists()) {
            try {
                FileInputStream fis = null;
                fis = new FileInputStream(file);
                s = fis.available();
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            Log.e("file", "file is not exist");
        }
        return s / 1024;

    }

    public static byte[] fileToByte(String path) {
        if (TextUtils.isEmpty(path)) {
            return null;
        }
        File file = new File(path);
        FileInputStream fin = null;
        try {
            fin = new FileInputStream(file);
            byte[] buffer = new byte[fin.available()];
            fin.read(buffer);
            fin.close();
            return buffer;
        } catch (Exception e) {
            e.printStackTrace();
            if (fin != null) {
                try {
                    fin.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            return null;
        }

    }

    public static long getCacheSize(String path) {
        long total = 0;
        File file = new File(path);
        if (file == null || !file.exists()) {
            return total;
        }
        if (file.isFile()) {
            total = file.length();
        } else if (file.isDirectory()) {
            File[] fileList = file.listFiles();
            for (int i = 0; i < fileList.length; i++) {
                total += getCacheSize(fileList[i].getAbsolutePath());
            }
        }

        return total;
    }

    public static long getCacheSize(File file) {
        long total = 0;
        if (file == null || !file.exists()) {
            return total;
        }
        if (file.isFile()) {
            total = file.length();
        } else if (file.isDirectory()) {
            File[] fileList = file.listFiles();
            for (int i = 0; i < fileList.length; i++) {
                total += getCacheSize(fileList[i].getAbsolutePath());
            }
        }

        return total;
    }

    public static String calculateSizeToString(long size) {
        if (size == 0) {
            return "0B";
        }
        String str = "";
        DecimalFormat df = new DecimalFormat("#.00");
        if (size < 1024) {
            str = df.format(size) + "B";
        } else if (size < 1024 * 1024) {
            str = df.format(size / 1024) + "KB";
        } else if (size < 1024 * 1024 * 1024) {
            str = df.format(size / 1024 / 1024) + "M";
        } else {
            str = df.format(size / 1024 / 1024 / 1024) + "G";
        }
        return str;
    }

    public static String calculateSizeToString(Context ctx, long size) {
        return Formatter.formatFileSize(ctx, size);
    }

    public static boolean deleteFiles(String path) {
        File file = new File(path);
        boolean flag = false;
        if (file == null || !file.exists()) {
            return flag;
        }
        if (file.isFile()) {
            file.delete();
        } else if (file.isDirectory()) {
            File[] fileList = file.listFiles();
            for (int i = 0; i < fileList.length; i++) {
                flag = deleteFiles(fileList[i].getAbsolutePath());
                // if(!flag){
                // break;
                // }
            }
        }
        return flag;
    }

    public static boolean checkFilesIsNeedDelete(String path, long intervalTime) {
        File file = new File(path);
        if (file == null || !file.exists()) {
            return false;
        }
        if (file.isFile()) {
            return deleteFileByIntervalTime(file, intervalTime);
        } else {
            File[] fileList = file.listFiles();
            if (fileList != null && fileList.length > 0) {
                for (int i = 0; i < fileList.length; i++) {
                    File temp = fileList[i];
                    if (temp.isDirectory()) {
                        checkFilesIsNeedDelete(temp.getAbsolutePath(), intervalTime);
                    } else {
                        deleteFileByIntervalTime(temp, intervalTime);
                    }
                }
            }
        }
        return true;
    }

    public static boolean deleteFileByIntervalTime(File file, long intervalTime) {
        long time = System.currentTimeMillis();
        if (time - file.lastModified() > intervalTime) {
            file.delete();
            return true;
        } else {
            return false;
        }
    }

    /**
     * 將數據寫入一個文件
     *
     * @param destFilePath 要創建的文件的路徑
     * @param data         待寫入的文件數據
     * @param startPos     起始偏移量
     * @param length       要寫入的數據長度
     * @return 成功寫入文件返回true, 失敗返回false
     */
    public static boolean writeFile(String destFilePath, byte[] data, int startPos, int length) {
        try {
            if (!createFile(destFilePath)) {
                return false;
            }
            FileOutputStream fos = new FileOutputStream(destFilePath);
            fos.write(data, startPos, length);
            fos.flush();
            if (null != fos) {
                fos.close();
                fos = null;
            }
            return true;

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 從一個輸入流裏寫文件
     *
     * @param destFilePath 要創建的文件的路徑
     * @param in           要讀取的輸入流
     * @return 寫入成功返回true, 寫入失敗返回false
     */
    public static boolean writeFile(String destFilePath, InputStream in) {
        try {
            if (!createFile(destFilePath)) {
                return false;
            }
            FileOutputStream fos = new FileOutputStream(destFilePath);
            int readCount = 0;
            int len = 1024;
            byte[] buffer = new byte[len];
            while ((readCount = in.read(buffer)) != -1) {
                fos.write(buffer, 0, readCount);
            }
            fos.flush();
            if (null != fos) {
                fos.close();
                fos = null;
            }
            if (null != in) {
                in.close();
                in = null;
            }
            return true;
        } catch (IOException e) {
            e.printStackTrace();
        }

        return false;
    }

    public static boolean appendFile(String filename, byte[] data, int datapos, int datalength) {
        try {

            createFile(filename);

            RandomAccessFile rf = new RandomAccessFile(filename, "rw");
            rf.seek(rf.length());
            rf.write(data, datapos, datalength);
            if (rf != null) {
                rf.close();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return true;
    }

    /**
     * 讀取文件,返回以byte數組形式的數據
     *
     * @param filePath 要讀取的文件路徑名
     * @return
     */
    public static byte[] readFile(String filePath) {
        try {
            if (isFileExist(filePath)) {
                FileInputStream fi = new FileInputStream(filePath);
                return readInputStream(fi);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 從一個數量流裏讀取數據,返回以byte數組形式的數據。 </br></br>
     * 需要注意的是,如果這個方法用在從本地文件讀取數據時,一般不會遇到問題,
     * 但如果是用於網絡操作,就經常會遇到一些麻煩(available()方法的問題)。所以如果是網絡流不應該使用這個方法。
     *
     * @param in 要讀取的輸入流
     * @return
     * @throws IOException
     */
    public static byte[] readInputStream(InputStream in) {
        try {
            ByteArrayOutputStream os = new ByteArrayOutputStream();

            byte[] b = new byte[in.available()];
            int length = 0;
            while ((length = in.read(b)) != -1) {
                os.write(b, 0, length);
            }

            b = os.toByteArray();

            in.close();
            in = null;

            os.close();
            os = null;

            return b;

        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 讀取網絡流
     *
     * @param in
     * @return
     */
    public static byte[] readNetWorkInputStream(InputStream in) {
        ByteArrayOutputStream os = null;
        try {
            os = new ByteArrayOutputStream();

            int readCount = 0;
            int len = 1024;
            byte[] buffer = new byte[len];
            while ((readCount = in.read(buffer)) != -1) {
                os.write(buffer, 0, readCount);
            }

            in.close();
            in = null;

            return os.toByteArray();

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (null != os) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                os = null;
            }
        }
        return null;
    }

    /**
     * 將一個文件拷貝到另外一個地方
     *
     * @param sourceFile    源文件地址
     * @param destFile      目的地址
     * @param shouldOverlay 是否覆蓋
     * @return
     */
    public static boolean copyFiles(String sourceFile, String destFile, boolean shouldOverlay) {
        try {
            if (shouldOverlay) {
                deleteFile(destFile);
            }
            FileInputStream fi = new FileInputStream(sourceFile);
            writeFile(destFile, fi);
            return true;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 判斷文件是否存在
     *
     * @param filePath 路徑名
     * @return
     */
    public static boolean isFileExist(String filePath) {
        File file = new File(filePath);
        return file.exists();
    }

    public static boolean isFileExist(String filePath, String filename) {
        File file = new File(filePath, filename);
        return file.exists();
    }


    /**
     * 創建一個文件,創建成功返回true
     *
     * @param filePath
     * @return
     */
    public static boolean createFile(String filePath) {
        try {
            File file = new File(filePath);
            if (file.exists()) {
                file.delete();
            }
            if (!file.exists()) {
                if (!file.getParentFile().exists()) {
                    file.getParentFile().mkdirs();
                }

                return file.createNewFile();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return true;
    }

    /**
     * 刪除一個文件
     *
     * @param filePath 要刪除的文件路徑名
     * @return true if this file was deleted, false otherwise
     */
    public static boolean deleteFile(String filePath) {
        try {
            File file = new File(filePath);
            if (file.exists()) {
                return file.delete();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 刪除 directoryPath目錄下的所有文件,包括刪除刪除文件夾
     *
     * @param dir
     */
    public static void deleteDirectory(File dir) {
        if (dir.isDirectory()) {
            File[] listFiles = dir.listFiles();
            for (int i = 0; i < listFiles.length; i++) {
                deleteDirectory(listFiles[i]);
            }
        }
        dir.delete();
    }

    /**
     * 字符串轉流
     *
     * @param str
     * @return
     */
    public static InputStream String2InputStream(String str) {
        ByteArrayInputStream stream = new ByteArrayInputStream(str.getBytes());
        return stream;
    }

    /**
     * 流轉字符串
     *
     * @param is
     * @return
     */
    public static String inputStream2String(InputStream is) {
        BufferedReader in = new BufferedReader(new InputStreamReader(is));
        StringBuffer buffer = new StringBuffer();
        String line = "";

        try {
            while ((line = in.readLine()) != null) {
                buffer.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return buffer.toString();
    }

    // 批量更改文件後綴
    public static void reNameSuffix(File dir, String oldSuffix, String newSuffix) {
        if (dir.isDirectory()) {
            File[] listFiles = dir.listFiles();
            for (int i = 0; i < listFiles.length; i++) {
                reNameSuffix(listFiles[i], oldSuffix, newSuffix);
            }
        } else {
            dir.renameTo(new File(dir.getPath().replace(oldSuffix, newSuffix)));
        }
    }

    public static void writeImage(Bitmap bitmap, String destPath, int quality) {
        try {
            FileUtil.deleteFile(destPath);
            if (FileUtil.createFile(destPath)) {
                FileOutputStream out = new FileOutputStream(destPath);
                if (bitmap.compress(Bitmap.CompressFormat.JPEG, quality, out)) {
                    out.flush();
                    out.close();
                    out = null;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 獲取文件路徑後綴名
     *
     * @param filePath
     * @return
     */
    public static String getSuffix(String filePath) {
        if (!TextUtils.isEmpty(filePath) && filePath.contains(".")) {
            return filePath.substring(filePath.lastIndexOf("."));
        }
        return "";
    }

    private static Map<String, String> MIME_MAP = new HashMap<>();

    static {
        MIME_MAP.put(".3gp", "video/3gpp");
        MIME_MAP.put(".apk", "application/vnd.android.package-archive");
        MIME_MAP.put(".asf", "video/x-ms-asf");
        MIME_MAP.put(".avi", "video/x-msvideo");
        MIME_MAP.put(".bin", "application/octet-stream");
        MIME_MAP.put(".bmp", "image/bmp");
        MIME_MAP.put(".c", "text/plain");
        MIME_MAP.put(".class", "application/octet-stream");
        MIME_MAP.put(".conf", "text/plain");
        MIME_MAP.put(".cpp", "text/plain");
        MIME_MAP.put(".doc", "application/msword");
        MIME_MAP.put(".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
        MIME_MAP.put(".xls", "application/vnd.ms-excel");
        MIME_MAP.put(".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        MIME_MAP.put(".exe", "application/octet-stream");
        MIME_MAP.put(".gif", "image/gif");
        MIME_MAP.put(".gtar", "application/x-gtar");
        MIME_MAP.put(".gz", "application/x-gzip");
        MIME_MAP.put(".h", "text/plain");
        MIME_MAP.put(".htm", "text/html");
        MIME_MAP.put(".html", "text/html");
        MIME_MAP.put(".jar", "application/java-archive");
        MIME_MAP.put(".java", "text/plain");
        MIME_MAP.put(".jpeg", "image/jpeg");
        MIME_MAP.put(".jpg", "image/jpeg");
        MIME_MAP.put(".js", "application/x-javascript");
        MIME_MAP.put(".log", "text/plain");
        MIME_MAP.put(".m3u", "audio/x-mpegurl");
        MIME_MAP.put(".m4a", "audio/mp4a-latm");
        MIME_MAP.put(".m4b", "audio/mp4a-latm");
        MIME_MAP.put(".m4p", "audio/mp4a-latm");
        MIME_MAP.put(".m4u", "video/vnd.mpegurl");
        MIME_MAP.put(".m4v", "video/x-m4v");
        MIME_MAP.put(".mov", "video/quicktime");
        MIME_MAP.put(".mp2", "audio/x-mpeg");
        MIME_MAP.put(".mp3", "audio/x-mpeg");
        MIME_MAP.put(".mp4", "video/mp4");
        MIME_MAP.put(".mpc", "application/vnd.mpohun.certificate");
        MIME_MAP.put(".mpe", "video/mpeg");
        MIME_MAP.put(".mpeg", "video/mpeg");
        MIME_MAP.put(".mpg", "video/mpeg");
        MIME_MAP.put(".mpg4", "video/mp4");
        MIME_MAP.put(".mpga", "audio/mpeg");
        MIME_MAP.put(".msg", "application/vnd.ms-outlook");
        MIME_MAP.put(".ogg", "audio/ogg");
        MIME_MAP.put(".pdf", "application/pdf");
        MIME_MAP.put(".png", "image/png");
        MIME_MAP.put(".pps", "application/vnd.ms-powerpoint");
        MIME_MAP.put(".ppt", "application/vnd.ms-powerpoint");
        MIME_MAP.put(".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation");
        MIME_MAP.put(".prop", "text/plain");
        MIME_MAP.put(".rc", "text/plain");
        MIME_MAP.put(".rmvb", "audio/x-pn-realaudio");
        MIME_MAP.put(".rtf", "application/rtf");
        MIME_MAP.put(".sh", "text/plain");
        MIME_MAP.put(".tar", "application/x-tar");
        MIME_MAP.put(".tgz", "application/x-compressed");
        MIME_MAP.put(".txt", "text/plain");
        MIME_MAP.put(".wav", "audio/x-wav");
        MIME_MAP.put(".wma", "audio/x-ms-wma");
        MIME_MAP.put(".wmv", "audio/x-ms-wmv");
        MIME_MAP.put(".wps", "application/vnd.ms-works");
        MIME_MAP.put(".xml", "text/plain");
        MIME_MAP.put(".z", "application/x-compress");
        MIME_MAP.put(".zip", "application/x-zip-compressed");
    }

    public static void openFile(Context context, String path) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        Uri uri = getUri(intent, new File(path), context);
        intent.setDataAndType(uri, getMimeTypeFromFile(new File(path)));
        context.startActivity(intent);
    }

    private static Uri getUri(Intent intent, File file, Context context) {
        Uri uri;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            //判斷版本是否在7.0以上
            uri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", file);
            //添加這一句表示對目標應用臨時授權該Uri所代表的文件
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        } else {
            uri = Uri.fromFile(file);
        }
        return uri;
    }

    public static String getMimeTypeFromFile(File file) {
        String type = "*/*";
        String fName = file.getName();
        //獲取後綴名前的分隔符"."在fName中的位置。
        int dotIndex = fName.lastIndexOf(".");
        if (dotIndex > 0) {
            //獲取文件的後綴名
            String end = fName.substring(dotIndex).toLowerCase(Locale.getDefault());
            //在MIME和文件類型的匹配表中找到對應的MIME類型。
            String MIME = MIME_MAP.get(end);
            if (!TextUtils.isEmpty(MIME)) {
                type = MIME;
            }
        }
        return type;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章