android uri轉換file
阿新 • • 發佈:2021-11-29
下載jar包commons-io-2.11.0.jar匯入專案工程,匯入import org.apache.commons.io.FileUtils;
如果使用系統import android.os.FileUtils;有些手機不相容會導致專案崩潰
public static File uriToFileApiQ(Uri uri, Context context) { Log.e("uriToFileApiQ","哦=="+uri); File file = null; if(uri == null) return file; //android10以上轉換 if (uri.getScheme().equals(ContentResolver.SCHEME_FILE)) { file = new File(uri.getPath()); } else if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) { //把檔案複製到沙盒目錄 ContentResolver contentResolver = context.getContentResolver(); String displayName = System.currentTimeMillis()+ Math.round((Math.random() + 1) * 1000) +"."+ MimeTypeMap.getSingleton().getExtensionFromMimeType(contentResolver.getType(uri)); // 註釋掉的方法可以獲取到原檔案的檔名,但是比較耗時 // Cursor cursor = contentResolver.query(uri, null, null, null, null); // if (cursor.moveToFirst()) { // String displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));} Log.e("相容","相容=="+displayName); try { InputStream is = contentResolver.openInputStream(uri); File cache = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES).getAbsolutePath(), displayName); FileOutputStream fos = new FileOutputStream(cache); Log.e("uriToFileApiQ","進入="); // FileUtils.copy(is, fos);//有的手機會崩潰 FileUtils.copyInputStreamToFile(is,cache); Log.e("uriToFileApiQ","來了="); file = cache; fos.close(); is.close(); } catch (IOException e) { Log.e("uriToFileApiQ","報錯="+e.getMessage()); e.printStackTrace(); } } return file; }