java文件的路径

ctehm74n  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(288)

这个问题在这里已经有答案了

android kotlin:获取一个filenotfoundexception,其文件名是从文件选择器中选择的(3个答案)
android-获取从文件资源管理器中选择的.txt文件的实际路径(1个答案)
从搜索图像的内容uri获取绝对文件路径(2个答案)
.getpath()和cursor在android中从uri获取文件真实路径的区别(1个答案)
无法从intent-onactivityresult获取文件uri(1个答案)
六天前关门了。
我试着从uri那里得到真正的路径。不幸的是,我得到了错误。
活动结果:

Uri uri = data.getData();
            String path = null;
            if (Build.VERSION.SDK_INT < 11)
                path = RealPathUtils.getRealPathFromURI_BelowAPI11(MainActivity.this, uri);

                // SDK >= 11 && SDK < 19
            else if (Build.VERSION.SDK_INT < 19)
                path = RealPathUtils.getRealPathFromURI_API11to18(MainActivity.this, uri);

                // SDK > 19 (Android 4.4)
            else
                path = RealPathUtils.getRealPathFromURI_API19(MainActivity.this, uri);
            Log.d("FILE_PATH", "File Path: " + path);
            // Get the file instance
            File file = new File(path);

实际路径:

@SuppressLint("NewApi")
public static String getRealPathFromURI_API19(Context context, Uri uri){
    String filePath = "";
    String wholeID = DocumentsContract.getDocumentId(uri);

//        Log.d("wholeID",wholeID);
    // Split at colon, use second item in the array
    String id = wholeID.split(":")[1];

    String[] column = { MediaStore.Images.Media.DATA };

    // where id is equal to
    String sel = MediaStore.Images.Media._ID + "=?";

    Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            column, sel, new String[]{ id }, null);

    int columnIndex = cursor.getColumnIndex(column[0]);

    if (cursor.moveToFirst()) {
        filePath = cursor.getString(columnIndex);
    }
    cursor.close();
    return filePath;
}

@SuppressLint("NewApi")
public static String getRealPathFromURI_API11to18(Context context, Uri contentUri) {
    String[] proj = { MediaStore.Images.Media.DATA };
    String result = null;

    CursorLoader cursorLoader = new CursorLoader(
            context,
            contentUri, proj, null, null, null);
    Cursor cursor = cursorLoader.loadInBackground();

    if(cursor != null){
        int column_index =
                cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        result = cursor.getString(column_index);
    }
    return result;
}

public static String getRealPathFromURI_BelowAPI11(Context context, Uri contentUri){
    String[] proj = { MediaStore.Images.Media.DATA };
    Cursor cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
    int column_index
            = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

我得到的路径是空的。而且,api超过19。我试过api级别25和23。我也有同样的问题。我尝试了更多的方法。但是,它完全不起作用。
有时我在python中遇到问题也是因为,我使用的是linux。这就是为什么我想澄清我在linux或其他方面有这个问题。
在升级androidstudio和使用linux之前,我也尝试过一些对我有用的东西
Git回购

String path = data.getStringExtra(mediaPath);
            File file = new File(path);
            Uri selectedFile = Uri.fromFile(new File(file.getAbsolutePath()));
            String[] filePathColumn = {MediaStore.Files.FileColumns.MEDIA_TYPE};

            Cursor cursor = getContentResolver().query(selectedFile, filePathColumn, null, null, null);
            assert cursor != null;
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            mediaPath = cursor.getString(columnIndex);
            txt.setText(path);
            // Set the Image in ImageView for Previewing the Media
            cursor.close();

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题