1. 程式人生 > 其它 >android uri轉換file

android uri轉換file

下載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;
    }