1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654 |
- package com.cooleshow.base.utils;
- import static android.os.Environment.DIRECTORY_DOWNLOADS;
- import android.annotation.SuppressLint;
- import android.content.ContentUris;
- import android.content.Context;
- import android.content.Intent;
- import android.database.Cursor;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.graphics.Matrix;
- import android.net.Uri;
- import android.os.Build;
- import android.os.Environment;
- import android.provider.DocumentsContract;
- import android.provider.MediaStore;
- import android.provider.OpenableColumns;
- import android.text.TextUtils;
- import android.util.Base64;
- import android.util.Log;
- import androidx.annotation.NonNull;
- import androidx.annotation.Nullable;
- import androidx.core.content.FileProvider;
- import java.io.BufferedOutputStream;
- 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.FileReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.LineNumberReader;
- import java.io.OutputStream;
- import java.text.DecimalFormat;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import okhttp3.ResponseBody;
- /**
- * Description:
- * Copyright : Copyright (c) 2019
- * Company : 大雅乐盟
- * Author : r
- * Date : 2019/9/6 15:07
- */
- public class MyFileUtils {
- private static final String TAG = "FileUtil";
- private static final String filesDirectory = getCacheDir(Utils.getApp())+ File.separator+"cooleshow";
- public static final String examDownloadDirectory = "examDownload";
- public static String getCacheDir(Context context) {
- String cacheDir = context.getExternalCacheDir().getAbsolutePath();
- return cacheDir;
- }
- public static String getCacheDir(Context context, String directory) {
- String fileDir;
- try {
- File file = new File(context.getExternalCacheDir() + File.separator + directory);
- if (!file.exists()) {
- file.mkdirs();
- }
- fileDir = file.getAbsolutePath();
- return fileDir;
- } catch (Exception e) {
- return "";
- }
- }
- public static String getFilesDir(Context context) {
- try {
- File file = context.getExternalFilesDir(filesDirectory);
- if (!file.exists()) {
- file.mkdirs();
- }
- String fileDir = file.getAbsolutePath();
- return fileDir;
- } catch (Exception e) {
- return "";
- }
- }
- public static String getFilesDir(Context context, String directory) {
- try {
- File file = context.getExternalFilesDir(filesDirectory + File.separator + directory);
- if (!file.exists()) {
- file.mkdirs();
- }
- String fileDir = file.getAbsolutePath();
- return fileDir;
- } catch (Exception e) {
- return "";
- }
- }
- public static String getPublicDirectory(String path) {
- String fileDir = null;
- try {
- File file = new File(filesDirectory);
- if (!file.exists()) {
- file.mkdirs();
- }
- fileDir = file.getAbsolutePath();
- if (!TextUtils.isEmpty(path)) {
- File filePath = new File(file.getPath() + File.separator + path);
- if (!filePath.exists()) {
- filePath.mkdirs();
- }
- fileDir = filePath.getAbsolutePath();
- }
- return fileDir;
- } catch (Exception e) {
- e.printStackTrace();
- return "";
- }
- }
- public static String getPublicDirectoryDownload() {
- try {
- File file = Environment.getExternalStoragePublicDirectory(DIRECTORY_DOWNLOADS);
- return file.getAbsolutePath();
- } catch (Exception e) {
- return "";
- }
- }
- /**
- * 获取该路径下全部的文件名
- *
- * @param path
- * @return
- */
- public static List<String> getFilesAllName(String path) {
- File file = new File(path);
- File[] files = file.listFiles();
- if (files == null) {
- Log.e("error", "空目录");
- return null;
- }
- List<String> s = new ArrayList<>();
- for (int i = 0; i < files.length; i++) {
- s.add(files[i].getAbsolutePath());
- }
- return s;
- }
- /**
- * 根据文件后缀名判断是否是图片(不一定准确)
- *
- * @param path
- * @return
- */
- public static boolean isImg(String path) {
- try {
- File file = new File(path);
- if (!file.exists()) {
- return false;
- }
- int lastDot = file.getName().lastIndexOf(".");
- if (lastDot < 0) {
- return false;
- }
- String fileType = getFileType(file.getName(), lastDot);
- return TextUtils.equals("file_image", fileType);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- }
- public static String getBase64Type(String str) {
- if (TextUtils.isEmpty(str)) {
- return "";
- }
- String type = "";
- switch (str) {
- case "data:application/msword;base64":
- type = "doc";
- case "data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64":
- type = "docx";
- case "data:application/vnd.ms-excel;base64":
- type = "xls";
- case "data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64":
- type = "xlsx";
- case "data:application/pdf;base64":
- type = "pdf";
- case "data:application/vnd.ms-powerpoint;base64":
- type = "ppt";
- case "data:application/vnd.openxmlformats-officedocument.presentationml.presentation;base64":
- type = "pptx";
- case "data:text/plain;base64":
- type = "txt";
- case "data:image/png;base64":
- type = "png";
- case "data:image/jpeg;base64":
- type = "jpg";
- }
- return type;
- }
- /**
- * 从sd卡取文件
- *
- * @param filename
- * @return
- */
- public String getFileFromSdcard(String filename) {
- ByteArrayOutputStream outputStream = null;
- FileInputStream fis = null;
- try {
- outputStream = new ByteArrayOutputStream();
- File file = new File(Environment.getExternalStorageDirectory(), filename);
- if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
- fis = new FileInputStream(file);
- int len = 0;
- byte[] data = new byte[1024];
- while ((len = fis.read(data)) != -1) {
- outputStream.write(data, 0, len);
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- outputStream.close();
- fis.close();
- } catch (IOException e) {
- }
- }
- return new String(outputStream.toByteArray());
- }
- /**
- * 保存文件到sd
- *
- * @param filename
- * @param content
- * @return
- */
- public static boolean saveContentToSdcard(String filename, String content) {
- boolean flag;
- FileOutputStream fos = null;
- content += "\r\n";
- try {
- File file = new File(filename);
- if (file.exists()) {
- file.mkdirs();
- }
- fos = new FileOutputStream(file, true);
- fos.write(content.getBytes());
- flag = true;
- } catch (Exception e) {
- e.printStackTrace();
- flag = false;
- } finally {
- try {
- if (fos != null) {
- fos.close();
- }
- } catch (IOException e) {
- }
- }
- return flag;
- }
- /**
- * 保存文件到sd
- *
- * @param
- * @param
- * @return
- */
- public static boolean saveFileToSdcard(String mPath, InputStream inputStream) {
- byte[] mData = null;
- try {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- int len = 0;
- byte[] bytes = new byte[1024];
- while ((len = inputStream.read(bytes)) != -1) {
- baos.write(bytes, 0, len);
- }
- mData = baos.toByteArray();
- } catch (IOException e) {
- e.printStackTrace();
- }
- try {
- FileOutputStream fos = new FileOutputStream(new File(mPath));
- fos.write(mData, 0, mData.length);
- return true;
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return false;
- }
- /**
- * 取得文件大小
- *
- * @param f
- * @return
- */
- public static long getFileSizes(File f) {
- long size = 0;
- try {
- if (f.exists()) {
- FileInputStream fis = null;
- fis = new FileInputStream(f);
- size = fis.available();
- } else {
- f.createNewFile();
- }
- } catch (Exception e) {
- }
- return size;
- }
- /**
- * 递归取得文件夹大小
- *
- * @param dir
- * @return
- * @throws Exception
- */
- public static long getFileSize(File dir) throws Exception {
- long size = 0;
- File flist[] = dir.listFiles();
- for (int i = 0; i < flist.length; i++) {
- if (flist[i].isDirectory()) {
- size = size + getFileSize(flist[i]);
- } else {
- size = size + flist[i].length();
- }
- }
- return size;
- }
- /**
- * 转换文件大小
- *
- * @param fileS
- * @return
- */
- public static String FormetFileSize(long fileS) {
- DecimalFormat df = new DecimalFormat("#.00");
- String fileSizeString = "";
- if (fileS < 1024) {
- fileSizeString = df.format((double) fileS) + "B";
- } else if (fileS < 1048576) {
- fileSizeString = df.format((double) fileS / 1024) + "K";
- } else if (fileS < 1073741824) {
- fileSizeString = df.format((double) fileS / 1048576) + "M";
- } else {
- fileSizeString = df.format((double) fileS / 1073741824) + "G";
- }
- return fileSizeString;
- }
- /**
- * 递归求取目录文件个数
- *
- * @param f
- * @return
- */
- public static long getlist(File f) {
- long size = 0;
- File flist[] = f.listFiles();
- size = flist.length;
- for (int i = 0; i < flist.length; i++) {
- if (flist[i].isDirectory()) {
- size = size + getlist(flist[i]);
- size--;
- }
- }
- return size;
- }
- /**
- * 在根目录下搜索文件
- *
- * @param keyword
- * @return
- */
- public static String searchFile(String keyword) {
- String result = "";
- File[] files = new File("/").listFiles();
- for (File file : files) {
- if (file.getName().indexOf(keyword) >= 0) {
- result += file.getPath() + "\n";
- }
- }
- if (result.equals("")) {
- result = "找不到文件!!";
- }
- return result;
- }
- /**
- *
- */
- public static List<String> search(File file, String[] ext) {
- List<String> list = new ArrayList<String>();
- if (file != null) {
- if (file.isDirectory()) {
- File[] listFile = file.listFiles();
- if (listFile != null) {
- for (int i = 0; i < listFile.length; i++) {
- search(listFile[i], ext);
- }
- }
- } else {
- String filename = file.getAbsolutePath();
- for (int i = 0; i < ext.length; i++) {
- if (filename.endsWith(ext[i])) {
- list.add(filename);
- break;
- }
- }
- }
- }
- return list;
- }
- /**
- * 查询文件
- *
- * @param file
- * @param keyword
- * @return
- */
- public static List<File> FindFile(File file, String keyword) {
- List<File> list = new ArrayList<File>();
- if (file.isDirectory()) {
- File[] files = file.listFiles();
- if (files != null) {
- for (File tempf : files) {
- if (tempf.isDirectory()) {
- if (tempf.getName().toLowerCase().lastIndexOf(keyword) > -1) {
- list.add(tempf);
- }
- list.addAll(FindFile(tempf, keyword));
- } else {
- if (tempf.getName().toLowerCase().lastIndexOf(keyword) > -1) {
- list.add(tempf);
- }
- }
- }
- }
- }
- return list;
- }
- /**
- * searchFile 查找文件并加入到ArrayList 当中去
- *
- * @param context
- * @param keyword
- * @param filepath
- * @return
- */
- public static List<Map<String, Object>> searchFile(Context context, String keyword, File filepath) {
- List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
- Map<String, Object> rowItem = null;
- int index = 0;
- // 判断SD卡是否存在
- if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
- File[] files = filepath.listFiles();
- if (files.length > 0) {
- for (File file : files) {
- if (file.isDirectory()) {
- if (file.getName().toLowerCase().lastIndexOf(keyword) > -1) {
- rowItem = new HashMap<String, Object>();
- rowItem.put("number", index); // 加入序列号
- rowItem.put("fileName", file.getName());// 加入名称
- rowItem.put("path", file.getPath()); // 加入路径
- rowItem.put("size", file.length() + ""); // 加入文件大小
- list.add(rowItem);
- }
- // 如果目录可读就执行(一定要加,不然会挂掉)
- if (file.canRead()) {
- list.addAll(searchFile(context, keyword, file)); // 如果是目录,递归查找
- }
- } else {
- // 判断是文件,则进行文件名判断
- try {
- if (file.getName().indexOf(keyword) > -1 || file.getName().indexOf(keyword.toUpperCase()) > -1) {
- rowItem = new HashMap<String, Object>();
- rowItem.put("number", index); // 加入序列号
- rowItem.put("fileName", file.getName());// 加入名称
- rowItem.put("path", file.getPath()); // 加入路径
- rowItem.put("size", file.length() + ""); // 加入文件大小
- list.add(rowItem);
- index++;
- }
- } catch (Exception e) {
- }
- }
- }
- }
- }
- return list;
- }
- /**
- * 根据后缀得到文件类型
- *
- * @param fileName
- * @param pointIndex
- * @return
- */
- public static String getFileType(String fileName, int pointIndex) {
- String type = fileName.substring(pointIndex + 1).toLowerCase();
- if ("m4a".equalsIgnoreCase(type) || "xmf".equalsIgnoreCase(type) || "ogg".equalsIgnoreCase(type) || "wav".equalsIgnoreCase(type)
- || "m4a".equalsIgnoreCase(type) || "aiff".equalsIgnoreCase(type) || "midi".equalsIgnoreCase(type)
- || "vqf".equalsIgnoreCase(type) || "aac".equalsIgnoreCase(type) || "flac".equalsIgnoreCase(type)
- || "tak".equalsIgnoreCase(type) || "wv".equalsIgnoreCase(type)) {
- type = "file_audio";
- } else if ("mp3".equalsIgnoreCase(type) || "mid".equalsIgnoreCase(type)) {
- type = "file_mp3";
- } else if ("avi".equalsIgnoreCase(type) || "mp4".equalsIgnoreCase(type) || "dvd".equalsIgnoreCase(type)
- || "mid".equalsIgnoreCase(type) || "mov".equalsIgnoreCase(type) || "mkv".equalsIgnoreCase(type)
- || "mp2v".equalsIgnoreCase(type) || "mpe".equalsIgnoreCase(type) || "mpeg".equalsIgnoreCase(type)
- || "mpg".equalsIgnoreCase(type) || "asx".equalsIgnoreCase(type) || "asf".equalsIgnoreCase(type)
- || "flv".equalsIgnoreCase(type) || "navi".equalsIgnoreCase(type) || "divx".equalsIgnoreCase(type)
- || "rm".equalsIgnoreCase(type) || "rmvb".equalsIgnoreCase(type) || "dat".equalsIgnoreCase(type)
- || "mpa".equalsIgnoreCase(type) || "vob".equalsIgnoreCase(type) || "3gp".equalsIgnoreCase(type)
- || "swf".equalsIgnoreCase(type) || "wmv".equalsIgnoreCase(type)) {
- type = "file_video";
- } else if ("bmp".equalsIgnoreCase(type) || "pcx".equalsIgnoreCase(type) || "tiff".equalsIgnoreCase(type)
- || "gif".equalsIgnoreCase(type) || "jpeg".equalsIgnoreCase(type) || "tga".equalsIgnoreCase(type)
- || "exif".equalsIgnoreCase(type) || "fpx".equalsIgnoreCase(type) || "psd".equalsIgnoreCase(type)
- || "cdr".equalsIgnoreCase(type) || "raw".equalsIgnoreCase(type) || "eps".equalsIgnoreCase(type)
- || "gif".equalsIgnoreCase(type) || "jpg".equalsIgnoreCase(type) || "jpeg".equalsIgnoreCase(type)
- || "png".equalsIgnoreCase(type) || "hdri".equalsIgnoreCase(type) || "ai".equalsIgnoreCase(type)) {
- type = "file_image";
- } else if ("ppt".equalsIgnoreCase(type) || "doc".equalsIgnoreCase(type) || "xls".equalsIgnoreCase(type)
- || "pps".equalsIgnoreCase(type) || "xlsx".equalsIgnoreCase(type) || "xlsm".equalsIgnoreCase(type)
- || "pptx".equalsIgnoreCase(type) || "pptm".equalsIgnoreCase(type) || "ppsx".equalsIgnoreCase(type)
- || "maw".equalsIgnoreCase(type) || "mdb".equalsIgnoreCase(type) || "pot".equalsIgnoreCase(type)
- || "msg".equalsIgnoreCase(type) || "oft".equalsIgnoreCase(type) || "xlw".equalsIgnoreCase(type)
- || "wps".equalsIgnoreCase(type) || "rtf".equalsIgnoreCase(type) || "ppsm".equalsIgnoreCase(type)
- || "potx".equalsIgnoreCase(type) || "potm".equalsIgnoreCase(type) || "ppam".equalsIgnoreCase(type)) {
- type = "ic_file_office";
- } else if ("txt".equalsIgnoreCase(type) || "text".equalsIgnoreCase(type) || "chm".equalsIgnoreCase(type)
- || "hlp".equalsIgnoreCase(type) || "pdf".equalsIgnoreCase(type) || "doc".equalsIgnoreCase(type)
- || "docx".equalsIgnoreCase(type) || "docm".equalsIgnoreCase(type) || "dotx".equalsIgnoreCase(type)) {
- type = "file_text";
- } else if ("ini".equalsIgnoreCase(type) || "sys".equalsIgnoreCase(type) || "dll".equalsIgnoreCase(type)
- || "adt".equalsIgnoreCase(type)) {
- type = "file_system";
- } else if ("rar".equalsIgnoreCase(type) || "zip".equalsIgnoreCase(type) || "arj".equalsIgnoreCase(type)
- || "gz".equalsIgnoreCase(type) || "z".equalsIgnoreCase(type) || "7Z".equalsIgnoreCase(type) || "GZ".equalsIgnoreCase(type)
- || "BZ".equalsIgnoreCase(type) || "ZPAQ".equalsIgnoreCase(type)) {
- type = "ic_file_rar";
- } else if ("html".equalsIgnoreCase(type) || "htm".equalsIgnoreCase(type) || "java".equalsIgnoreCase(type)
- || "php".equalsIgnoreCase(type) || "asp".equalsIgnoreCase(type) || "aspx".equalsIgnoreCase(type)
- || "jsp".equalsIgnoreCase(type) || "shtml".equalsIgnoreCase(type) || "xml".equalsIgnoreCase(type)) {
- type = "file_web";
- } else if ("exe".equalsIgnoreCase(type) || "com".equalsIgnoreCase(type) || "bat".equalsIgnoreCase(type)
- || "iso".equalsIgnoreCase(type) || "msi".equalsIgnoreCase(type)) {
- type = "file_exe";
- } else if ("apk".equalsIgnoreCase(type)) {
- type = "ic_file_apk";
- } else {
- type = "ic_file_normal";
- }
- return type;
- }
- /**
- * 改变文件大小显示的内容
- *
- * @param size
- * @return
- */
- public static String changeFileSize(String size) {
- if (Integer.parseInt(size) > 1024) {
- size = Integer.parseInt(size) / 1024 + "K";
- } else if (Integer.parseInt(size) > (1024 * 1024)) {
- size = Integer.parseInt(size) / (1024 * 1024) + "M";
- } else if (Integer.parseInt(size) > (1024 * 1024 * 1024)) {
- size = Integer.parseInt(size) / (1024 * 1024 * 1024) + "G";
- } else {
- size += "B";
- }
- return size;
- }
- /**
- * 得到所有文件
- *
- * @param dir
- * @return
- */
- public static ArrayList<File> getAllFiles(File dir) {
- ArrayList<File> allFiles = new ArrayList<File>();
- // 递归取得目录下的所有文件及文件夹
- File[] files = dir.listFiles();
- for (int i = 0; i < files.length; i++) {
- File file = files[i];
- allFiles.add(file);
- if (file.isDirectory()) {
- getAllFiles(file);
- }
- }
- return allFiles;
- }
- /**
- * 判断文件MimeType 类型
- *
- * @param f
- * @return
- */
- public static String getMIMEType(File f) {
- String type = "";
- String fName = f.getName();
- /* 取得扩展名 */
- String end = fName.substring(fName.lastIndexOf(".") + 1, fName.length()).toLowerCase();
- /* 依扩展名的类型决定MimeType */
- if (end.equalsIgnoreCase("m4a") || end.equalsIgnoreCase("mp3") || end.equalsIgnoreCase("mid") || end.equalsIgnoreCase("xmf")
- || end.equalsIgnoreCase("ogg") || end.equalsIgnoreCase("wav")) {
- type = "audio";
- } else if (end.equalsIgnoreCase("3gp") || end.equalsIgnoreCase("mp4")) {
- type = "video";
- } else if (end.equalsIgnoreCase("jpg") || end.equalsIgnoreCase("gif") || end.equalsIgnoreCase("png")
- || end.equalsIgnoreCase("jpeg") || end.equalsIgnoreCase("bmp")) {
- type = "image";
- } else if (end.equalsIgnoreCase("apk")) {
- /* android.permission.INSTALL_PACKAGES */
- type = "application/vnd.android.package-archive";
- } else if (end.equalsIgnoreCase("txt") || end.equalsIgnoreCase("java")) {
- /* android.permission.INSTALL_PACKAGES */
- type = "text";
- } else {
- type = "*";
- }
- /* 如果无法直接打开,就跳出软件列表给用户选择 */
- if (end.equalsIgnoreCase("apk")) {
- } else {
- type += "/*";
- }
- return type;
- }
- /**
- * 拷贝文件
- *
- * @param fromFile
- * @param toFile
- * @throws IOException
- */
- public static void copyFile(File fromFile, String toFile) throws IOException {
- FileInputStream from = null;
- FileOutputStream to = null;
- try {
- from = new FileInputStream(fromFile);
- to = new FileOutputStream(toFile);
- byte[] buffer = new byte[1024];
- int bytesRead;
- while ((bytesRead = from.read(buffer)) != -1)
- to.write(buffer, 0, bytesRead); // write
- } finally {
- if (from != null)
- try {
- from.close();
- } catch (IOException e) {
- Log.e(TAG, "", e);
- }
- if (to != null)
- try {
- to.close();
- } catch (IOException e) {
- Log.e(TAG, "", e);
- }
- }
- }
- /**
- * 创建文件
- *
- * @param file
- * @return
- */
- public static File createNewFile(File file) {
- try {
- if (file.exists()) {
- return file;
- }
- File dir = file.getParentFile();
- if (!dir.exists()) {
- dir.mkdirs();
- }
- if (!file.exists()) {
- file.createNewFile();
- }
- } catch (IOException e) {
- Log.e(TAG, "", e);
- return null;
- }
- return file;
- }
- /**
- * 创建文件
- *
- * @param path
- */
- public static File createNewFile(String path) {
- File file = new File(path);
- return createNewFile(file);
- }// end method createText()
- /**
- * 删除文件
- *
- * @param path
- */
- public static void deleteFile(String path) {
- if (TextUtils.isEmpty(path)) {
- return;
- }
- File file = new File(path);
- deleteFile(file);
- }
- /**
- * 删除文件
- *
- * @param file
- */
- public static void deleteFile(File file) {
- try {
- if (!file.exists()) {
- return;
- }
- if (file.isFile()) {
- file.delete();
- } else if (file.isDirectory()) {
- File files[] = file.listFiles();
- for (int i = 0; i < files.length; i++) {
- deleteFile(files[i]);
- }
- }
- file.delete();
- } catch (Exception e) {
- }
- }
- /**
- * 向Text文件中写入内容
- *
- * @param content
- * @return
- */
- public static boolean write(String path, String content) {
- return write(path, content, false);
- }
- public static boolean write(String path, String content, boolean append) {
- return write(new File(path), content, append);
- }
- public static boolean write(File file, String content) {
- return write(file, content, false);
- }
- /**
- * 写入文件
- *
- * @param file
- * @param content
- * @param append
- * @return
- */
- public static boolean write(File file, String content, boolean append) {
- if (file == null || TextUtils.isEmpty(content)) {
- return false;
- }
- if (!file.exists()) {
- file = createNewFile(file);
- }
- FileOutputStream fos = null;
- try {
- fos = new FileOutputStream(file, append);
- fos.write(content.getBytes());
- } catch (Exception e) {
- Log.e(TAG, "", e);
- return false;
- } finally {
- try {
- fos.close();
- } catch (IOException e) {
- Log.e(TAG, "", e);
- }
- fos = null;
- }
- return true;
- }
- /**
- * 获得文件名
- *
- * @param path
- * @return
- */
- public static String getFileName(String path) {
- if (TextUtils.isEmpty(path)) {
- return null;
- }
- File f = new File(path);
- String name = f.getName();
- f = null;
- return name;
- }
- /**
- * 读取文件内容,从第startLine行开始,读取lineCount行
- *
- * @param file
- * @param startLine
- * @param lineCount
- * @return 读到文字的list, 如果list.size<lineCount则说明读到文件末尾了
- */
- public static List<String> readFile(File file, int startLine, int lineCount) {
- if (file == null || startLine < 1 || lineCount < 1) {
- return null;
- }
- if (!file.exists()) {
- return null;
- }
- FileReader fileReader = null;
- List<String> list = null;
- try {
- list = new ArrayList<String>();
- fileReader = new FileReader(file);
- LineNumberReader lineReader = new LineNumberReader(fileReader);
- boolean end = false;
- for (int i = 1; i < startLine; i++) {
- if (lineReader.readLine() == null) {
- end = true;
- break;
- }
- }
- if (end == false) {
- for (int i = startLine; i < startLine + lineCount; i++) {
- String line = lineReader.readLine();
- if (line == null) {
- break;
- }
- list.add(line);
- }
- }
- } catch (Exception e) {
- Log.e(TAG, "read log error!", e);
- } finally {
- if (fileReader != null) {
- try {
- fileReader.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- return list;
- }
- /**
- * 创建文件夹
- *
- * @param dir
- * @return
- */
- public static boolean createDir(File dir) {
- try {
- if (!dir.exists()) {
- dir.mkdirs();
- }
- return true;
- } catch (Exception e) {
- Log.e(TAG, "create dir error", e);
- return false;
- }
- }
- /**
- * 在SD卡上创建目录
- *
- * @param dirName
- */
- public static File creatSDDir(String dirName) {
- File dir = new File(dirName);
- dir.mkdir();
- return dir;
- }
- /**
- * 判断SD卡上的文件是否存在
- */
- public static boolean isFileExist(String fileName) {
- File file = new File(fileName);
- return file == null ? false : file.exists();
- }
- /**
- * 将一个InputStream里面的数据写入到SD卡中
- */
- public static File write2SDFromInput(String path, String fileName, InputStream input) {
- File file = null;
- OutputStream output = null;
- try {
- creatSDDir(path);
- file = createNewFile(path + "/" + fileName);
- output = new FileOutputStream(file);
- byte buffer[] = new byte[1024];
- int len = -1;
- while ((len = input.read(buffer)) != -1) {
- output.write(buffer, 0, len);
- }
- output.flush();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- output.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return file;
- }
- /**
- * 读取文件内容 从文件中一行一行的读取文件
- *
- * @param file
- * @return
- */
- public static String readFile(File file) {
- FileReader read = null;
- String content = "";
- String result = "";
- BufferedReader br = null;
- try {
- read = new FileReader(file);
- br = new BufferedReader(read);
- while ((content = br.readLine().toString().trim()) != null) {
- result += content + "\r\n";
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- read.close();
- br.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return result;
- }
- /**
- * 将图片保存到本地时进行压缩, 即将图片从Bitmap形式变为File形式时进行压缩,
- * 特点是: File形式的图片确实被压缩了, 但是当你重新读取压缩后的file为 Bitmap是,它占用的内存并没有改变
- *
- * @param bmp
- * @param file
- */
- public static void compressBmpToFile(Bitmap bmp, File file) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- int options = 100;// 个人喜欢从80开始,
- bmp.compress(Bitmap.CompressFormat.JPEG, options, baos);
- while (baos.toByteArray().length / 1024 > 100) {
- baos.reset();
- options -= 10;
- bmp.compress(Bitmap.CompressFormat.JPEG, options, baos);
- }
- try {
- FileOutputStream fos = new FileOutputStream(file);
- fos.write(baos.toByteArray());
- fos.flush();
- fos.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 将图片从本地读到内存时,进行压缩 ,即图片从File形式变为Bitmap形式
- * 特点: 通过设置采样率, 减少图片的像素, 达到对内存中的Bitmap进行压缩
- *
- * @param srcPath
- * @return
- */
- public static Bitmap compressImageFromFile(String srcPath, float pixWidth, float pixHeight) {
- BitmapFactory.Options options = new BitmapFactory.Options();
- options.inJustDecodeBounds = true;// 只读边,不读内容
- Bitmap bitmap = BitmapFactory.decodeFile(srcPath, options);
- options.inJustDecodeBounds = false;
- int w = options.outWidth;
- int h = options.outHeight;
- //float pixWidth = 800f;//
- //float pixHeight = 480f;//
- int scale = 1;
- if (w > h && w > pixWidth) {
- scale = (int) (options.outWidth / pixWidth);
- } else if (w < h && h > pixHeight) {
- scale = (int) (options.outHeight / pixHeight);
- }
- if (scale <= 0)
- scale = 1;
- options.inSampleSize = scale;// 设置采样率
- options.inPreferredConfig = Bitmap.Config.ARGB_8888;// 该模式是默认的,可不设
- options.inPurgeable = true;// 同时设置才会有效
- options.inInputShareable = true;// 。当系统内存不够时候图片自动被回收
- bitmap = BitmapFactory.decodeFile(srcPath, options);
- // return compressBmpFromBmp(bitmap);//原来的方法调用了这个方法企图进行二次压缩
- // 其实是无效的,大家尽管尝试
- return bitmap;
- }
- /**
- * 指定分辨率和清晰度的图片压缩
- */
- public void transImage(String fromFile, String toFile, int width, int height, int quality) {
- try {
- Bitmap bitmap = BitmapFactory.decodeFile(fromFile);
- int bitmapWidth = bitmap.getWidth();
- int bitmapHeight = bitmap.getHeight();
- // 缩放图片的尺寸
- float scaleWidth = (float) width / bitmapWidth;
- float scaleHeight = (float) height / bitmapHeight;
- Matrix matrix = new Matrix();
- matrix.postScale(scaleWidth, scaleHeight);
- // 产生缩放后的Bitmap对象
- Bitmap resizeBitmap = (Bitmap) Bitmap.createBitmap(bitmap, 0, 0, bitmapWidth, bitmapHeight, matrix, false);
- // save file
- File myCaptureFile = new File(toFile);
- FileOutputStream out = new FileOutputStream(myCaptureFile);
- if (resizeBitmap.compress(Bitmap.CompressFormat.JPEG, quality, out)) {
- out.flush();
- out.close();
- }
- if (!bitmap.isRecycled()) {
- bitmap.recycle();//记得释放资源,否则会内存溢出
- }
- if (!resizeBitmap.isRecycled()) {
- resizeBitmap.recycle();
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException ex) {
- ex.printStackTrace();
- }
- }
- public static String getFilePath(Bitmap bitmap) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- bitmap.compress(Bitmap.CompressFormat.PNG, 80, baos);
- String path = Environment.getExternalStorageDirectory() + "/dayaWhiteBroad";
- File dir = new File(path);
- if (!dir.exists()) {
- dir.mkdirs();
- }
- File file = new File(path + "/" + System.currentTimeMillis() + ".png");
- try {
- file.createNewFile();
- FileOutputStream fos = new FileOutputStream(file);
- InputStream is = new ByteArrayInputStream(baos.toByteArray());
- int x = 0;
- byte[] b = new byte[1024 * 100];
- while ((x = is.read(b)) != -1) {
- fos.write(b, 0, x);
- }
- fos.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return file.getPath();
- }
- /**
- * 保存图片到图库
- *
- * @param bmp
- */
- public static void saveImageToGallery(Bitmap bmp, String path) {
- // 首先保存图片
- File file = new File(path);
- try {
- FileOutputStream fos = new FileOutputStream(file);
- bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);
- fos.flush();
- fos.close();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public static boolean writeFileToSDCard(ResponseBody body, String filePath, String fileName) {
- if (null == body) {
- return false;
- }
- try {
- File parentFile = new File(filePath);
- if (!parentFile.exists()) {
- parentFile.mkdirs();
- }
- File futureStudioIconFile = new File(parentFile, fileName);
- InputStream inputStream = null;
- OutputStream outputStream = null;
- try {
- byte[] fileReader = new byte[4096];
- long fileSize = body.contentLength();
- long fileSizeDownloaded = 0;
- inputStream = body.byteStream();
- outputStream = new FileOutputStream(futureStudioIconFile);
- while (true) {
- int read = inputStream.read(fileReader);
- if (read == -1) {
- break;
- }
- outputStream.write(fileReader, 0, read);
- fileSizeDownloaded += read;
- }
- outputStream.flush();
- return true;
- } catch (IOException e) {
- return false;
- } finally {
- if (inputStream != null) {
- inputStream.close();
- }
- if (outputStream != null) {
- outputStream.close();
- }
- }
- } catch (IOException e) {
- return false;
- }
- }
- public static String uriToFile(Context context, Uri uri, String filePath) {
- File privateFile = new File(filePath);
- File fileParent = privateFile.getParentFile();
- if (!fileParent.exists()) {
- fileParent.mkdirs();
- }
- if (privateFile.exists()) return privateFile.getAbsolutePath();
- InputStream ist = null;
- OutputStream ost = null;
- try {
- privateFile.createNewFile();
- ist = context.getContentResolver().openInputStream(uri);
- ost = new FileOutputStream(privateFile);
- byte[] buffer = new byte[4096];
- int byteCount = 0;
- while ((byteCount = ist.read(buffer)) != -1) { // 循环从输入流读取 buffer字节
- ost.write(buffer, 0, byteCount); // 将读取的输入流写入到输出流
- }
- } catch (IOException e) {
- return "";
- } finally {
- try {
- if (ist != null) {
- ist.close();
- }
- if (ost != null) {
- ost.close();
- }
- } catch (IOException e) {
- return "";
- }
- }
- return privateFile.getAbsolutePath();
- }
- public static Intent startIntent(Context context, String path) {
- if (TextUtils.isEmpty(path)) {
- return null;
- }
- Intent intent = null;
- switch (path.substring(path.lastIndexOf(".") + 1)) {
- case "pdf":
- intent = getPdfFileIntent(context, path);
- break;
- case "text":
- intent = getTextFileIntent(context, path);
- break;
- case "html":
- intent = getHtmlFileIntent(path);
- break;
- case "doc":
- case "docx":
- intent = getWordFileIntent(context, path);
- break;
- case "xls":
- case "xlsx":
- intent = getHtmlFileIntent(path);
- break;
- }
- return intent;
- }
- //android获取一个用于打开HTML文件的intent
- public static Intent getHtmlFileIntent(String Path) {
- File file = new File(Path);
- Uri uri = Uri.parse(file.toString()).buildUpon().encodedAuthority("com.android.htmlfileprovider").scheme("content").encodedPath(file.toString()).build();
- Intent intent = new Intent("android.intent.action.VIEW");
- intent.setDataAndType(uri, "text/html");
- return intent;
- }
- //android获取一个用于打开图片文件的intent
- public static Intent getImageFileIntent(String Path) {
- File file = new File(Path);
- Intent intent = new Intent("android.intent.action.VIEW");
- intent.addCategory("android.intent.category.DEFAULT");
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- Uri uri = Uri.fromFile(file);
- intent.setDataAndType(uri, "image/*");
- return intent;
- }
- //android获取一个用于打开PDF文件的intent
- public static Intent getPdfFileIntent(Context context, String Path) {
- File file = new File(Path);
- Intent intent = new Intent("android.intent.action.VIEW");
- intent.addCategory("android.intent.category.DEFAULT");
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- Uri uri = null;
- final boolean isN = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N;
- if (isN) {
- uri = FileProvider.getUriForFile(context, context.getPackageName() + ".FileProvider", file);
- } else {
- uri = Uri.fromFile(file);
- }
- intent.setDataAndType(uri, "application/pdf");
- return intent;
- }
- //android获取一个用于打开文本文件的intent
- public static Intent getTextFileIntent(Context context, String Path) {
- File file = new File(Path);
- Intent intent = new Intent("android.intent.action.VIEW");
- intent.addCategory("android.intent.category.DEFAULT");
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- Uri uri = null;
- final boolean isN = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N;
- if (isN) {
- uri = FileProvider.getUriForFile(context, context.getPackageName() + ".FileProvider", file);
- } else {
- uri = Uri.fromFile(file);
- }
- intent.setDataAndType(uri, "text/plain");
- return intent;
- }
- //android获取一个用于打开音频文件的intent
- public static Intent getAudioFileIntent(String Path) {
- File file = new File(Path);
- Intent intent = new Intent("android.intent.action.VIEW");
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- intent.putExtra("oneshot", 0);
- intent.putExtra("configchange", 0);
- Uri uri = Uri.fromFile(file);
- intent.setDataAndType(uri, "audio/*");
- return intent;
- }
- //android获取一个用于打开视频文件的intent
- public static Intent getVideoFileIntent(String Path) {
- File file = new File(Path);
- Intent intent = new Intent("android.intent.action.VIEW");
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- intent.putExtra("oneshot", 0);
- intent.putExtra("configchange", 0);
- Uri uri = Uri.fromFile(file);
- intent.setDataAndType(uri, "video/*");
- return intent;
- }
- //android获取一个用于打开CHM文件的intent
- public static Intent getChmFileIntent(String Path) {
- File file = new File(Path);
- Intent intent = new Intent("android.intent.action.VIEW");
- intent.addCategory("android.intent.category.DEFAULT");
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- Uri uri = Uri.fromFile(file);
- intent.setDataAndType(uri, "application/x-chm");
- return intent;
- }
- //android获取一个用于打开Word文件的intent
- public static Intent getWordFileIntent(Context context, String Path) {
- File file = new File(Path);
- Intent intent = new Intent("android.intent.action.VIEW");
- intent.addCategory("android.intent.category.DEFAULT");
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- Uri uri = null;
- final boolean isN = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N;
- if (isN) {
- uri = FileProvider.getUriForFile(context, context.getPackageName() + ".FileProvider", file);
- } else {
- uri = Uri.fromFile(file);
- }
- intent.setDataAndType(uri, "application/msword");
- return intent;
- }
- //android获取一个用于打开Excel文件的intent
- public static Intent getExcelFileIntent(String Path) {
- File file = new File(Path);
- Intent intent = new Intent("android.intent.action.VIEW");
- intent.addCategory("android.intent.category.DEFAULT");
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- Uri uri = Uri.fromFile(file);
- intent.setDataAndType(uri, "application/vnd.ms-excel");
- return intent;
- }
- //android获取一个用于打开PPT文件的intent
- public static Intent getPPTFileIntent(String Path) {
- File file = new File(Path);
- Intent intent = new Intent("android.intent.action.VIEW");
- intent.addCategory("android.intent.category.DEFAULT");
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- Uri uri = Uri.fromFile(file);
- intent.setDataAndType(uri, "application/vnd.ms-powerpoint");
- return intent;
- }
- //android获取一个用于打开apk文件的intent
- public static Intent getApkFileIntent(String Path) {
- File file = new File(Path);
- Intent intent = new Intent();
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.setAction(Intent.ACTION_VIEW);
- intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
- return intent;
- }
- public static final String DOCUMENTS_DIR = "documents";
- @SuppressLint("NewApi")
- public static String getPath(final Context context, final Uri uri) {
- final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
- // DocumentProvider
- if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
- // ExternalStorageProvider
- if (isExternalStorageDocument(uri)) {
- final String docId = DocumentsContract.getDocumentId(uri);
- final String[] split = docId.split(":");
- final String type = split[0];
- if ("primary".equalsIgnoreCase(type)) {
- return Environment.getExternalStorageDirectory() + "/" + split[1];
- }
- }
- // DownloadsProvider
- else if (isDownloadsDocument(uri)) {
- final String id = DocumentsContract.getDocumentId(uri);
- if (id != null && id.startsWith("raw:")) {
- return id.substring(4);
- }
- String[] contentUriPrefixesToTry = new String[]{
- "content://downloads/public_downloads",
- "content://downloads/my_downloads"
- };
- for (String contentUriPrefix : contentUriPrefixesToTry) {
- Uri contentUri = ContentUris.withAppendedId(Uri.parse(contentUriPrefix), Long.valueOf(id));
- try {
- String path = getDataColumn(context, contentUri, null, null);
- if (path != null && !path.equals("")) {
- return path;
- }
- } catch (Exception e) {
- }
- }
- // path could not be retrieved using ContentResolver, therefore copy file to accessible cache using streams
- String fileName = getFileName(context, uri);
- File cacheDir = getDocumentCacheDir(context);
- File file = generateFileName(fileName, cacheDir);
- String destinationPath = null;
- if (file != null) {
- destinationPath = file.getAbsolutePath();
- saveFileFromUri(context, uri, destinationPath);
- }
- return destinationPath;
- }
- // MediaProvider
- else if (isMediaDocument(uri)) {
- final String docId = DocumentsContract.getDocumentId(uri);
- final String[] split = docId.split(":");
- final String type = split[0];
- Uri contentUri = null;
- if ("image".equals(type)) {
- contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
- } else if ("video".equals(type)) {
- contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
- } else if ("audio".equals(type)) {
- contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
- }
- final String selection = "_id=?";
- final String[] selectionArgs = new String[]{split[1]};
- return getDataColumn(context, contentUri, selection, selectionArgs);
- }
- }
- // MediaStore (and general)
- else if ("content".equalsIgnoreCase(uri.getScheme())) {
- String path = getDataColumn(context, uri, null, null);
- if (path != null && !path.equals("")) return path;
- // path could not be retrieved using ContentResolver, therefore copy file to accessible cache using streams
- String fileName = getFileName(context, uri);
- File cacheDir = getDocumentCacheDir(context);
- File file = generateFileName(fileName, cacheDir);
- String destinationPath = null;
- if (file != null) {
- destinationPath = file.getAbsolutePath();
- saveFileFromUri(context, uri, destinationPath);
- }
- return destinationPath;
- }
- // File
- else if ("file".equalsIgnoreCase(uri.getScheme())) {
- return uri.getPath();
- }
- return null;
- }
- /**
- * @param uri The Uri to check.
- * @return Whether the Uri authority is ExternalStorageProvider.
- */
- public static boolean isExternalStorageDocument(Uri uri) {
- return "com.android.externalstorage.documents".equals(uri.getAuthority());
- }
- /**
- * @param uri The Uri to check.
- * @return Whether the Uri authority is DownloadsProvider.
- */
- public static boolean isDownloadsDocument(Uri uri) {
- return "com.android.providers.downloads.documents".equals(uri.getAuthority());
- }
- /**
- * @param uri The Uri to check.
- * @return Whether the Uri authority is MediaProvider.
- */
- public static boolean isMediaDocument(Uri uri) {
- return "com.android.providers.media.documents".equals(uri.getAuthority());
- }
- public static String getDataColumn(Context context, Uri uri, String selection,
- String[] selectionArgs) {
- Cursor cursor = null;
- final String column = "_data";
- final String[] projection = {column};
- String path = "";
- try {
- cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
- null);
- if (cursor != null && cursor.moveToFirst()) {
- final int column_index = cursor.getColumnIndexOrThrow(column);
- path = cursor.getString(column_index);
- return path;
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (cursor != null)
- cursor.close();
- }
- return path;
- }
- public static String getFileName(@NonNull Context context, Uri uri) {
- String mimeType = context.getContentResolver().getType(uri);
- String filename = null;
- if (mimeType == null && context != null) {
- String path = getPath(context, uri);
- if (path == null) {
- filename = getName(uri.toString());
- } else {
- File file = new File(path);
- filename = file.getName();
- }
- } else {
- Cursor returnCursor = context.getContentResolver().query(uri, null,
- null, null, null);
- if (returnCursor != null) {
- int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
- returnCursor.moveToFirst();
- filename = returnCursor.getString(nameIndex);
- returnCursor.close();
- }
- }
- return filename;
- }
- public static String getName(String filename) {
- if (filename == null) {
- return null;
- }
- int index = filename.lastIndexOf('/');
- return filename.substring(index + 1);
- }
- public static File getDocumentCacheDir(@NonNull Context context) {
- File dir = new File(context.getCacheDir(), DOCUMENTS_DIR);
- if (!dir.exists()) {
- dir.mkdirs();
- }
- return dir;
- }
- @Nullable
- public static File generateFileName(@Nullable String name, File directory) {
- if (name == null) {
- return null;
- }
- File file = new File(directory, name);
- if (file.exists()) {
- String fileName = name;
- String extension = "";
- int dotIndex = name.lastIndexOf('.');
- if (dotIndex > 0) {
- fileName = name.substring(0, dotIndex);
- extension = name.substring(dotIndex);
- }
- int index = 0;
- while (file.exists()) {
- index++;
- name = fileName + '(' + index + ')' + extension;
- file = new File(directory, name);
- }
- }
- try {
- if (!file.createNewFile()) {
- return null;
- }
- } catch (IOException e) {
- return null;
- }
- return file;
- }
- private static void saveFileFromUri(Context context, Uri uri, String destinationPath) {
- InputStream is = null;
- BufferedOutputStream bos = null;
- try {
- is = context.getContentResolver().openInputStream(uri);
- bos = new BufferedOutputStream(new FileOutputStream(destinationPath, false));
- byte[] buf = new byte[1024];
- is.read(buf);
- do {
- bos.write(buf);
- } while (is.read(buf) != -1);
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- if (is != null) is.close();
- if (bos != null) bos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- //bitmap转为base64
- public static String bitmapToBase64(Bitmap bitmap) {
- String result = null;
- ByteArrayOutputStream baos = null;
- try {
- if (bitmap != null) {
- baos = new ByteArrayOutputStream();
- bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
- baos.flush();
- baos.close();
- byte[] bitmapBytes = baos.toByteArray();
- result = Base64.encodeToString(bitmapBytes, Base64.DEFAULT);
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- if (baos != null) {
- baos.flush();
- baos.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return result;
- }
- //base64转为bitmap
- public static Bitmap base64ToBitmap(String base64Data) {
- byte[] bytes = Base64.decode(base64Data, Base64.NO_WRAP);
- return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
- }
- }
|