如何从 URI 中获取文件路径? [复制]

Posted

技术标签:

【中文标题】如何从 URI 中获取文件路径? [复制]【英文标题】:How to get the file path from URI? [duplicate] 【发布时间】:2012-02-11 16:49:08 【问题描述】:

请在下面找到我的代码。我需要获取用户从 SDcard 中选择的 pdf 文档的文件路径。问题是 URI.getPath() 返回:

/file:///mnt/sdcard/my%20Report.pdf/my Report.pdf

正确的路径是

/sdcard/my Report.pdf

请注意我在***上搜索但找到了获取图像或视频文件路径的示例,没有如何获取PDF的文件路径示例?

我的代码,不是所有代码,只有 pdf 部分

 public void openPDF(View v)
 
     Intent intent = new Intent();
     //intent.setType("pdf/*");
     intent.setType("application/pdf");
     intent.setAction(Intent.ACTION_GET_CONTENT);
     startActivityForResult(Intent.createChooser(intent, "Select Pdf"), SELECT_PDF_DIALOG);
 
 public void onActivityResult(int requestCode, int resultCode, Intent result) 
 
     if (resultCode == RESULT_OK) 
     
         if (requestCode == SELECT_PDF_DIALOG) 
         
             Uri data = result.getData();
             if(data.getLastPathSegment().endsWith("pdf"))
             
                String pdfPath = data.getPath();
              
             else 
             
                 CommonMethods.ShowMessageBox(CraneTrackActivity.this, "Invalid file type");   
                            
          
      
 

能否请教我如何从 URI 中获取正确的路径?

【问题讨论】:

这里是问题的正确答案[看看][1][1]:***.com/questions/3401579/… 【参考方案1】:
File myFile = new File(uri.toString());
myFile.getAbsolutePath()

应该返回正确的路径

编辑

正如@Tron 建议的那样,工作代码是

File myFile = new File(uri.getPath());
myFile.getAbsolutePath()

【讨论】:

我这里没有文件,我需要从 Uri 获取它。 非常感谢您的帮助,但它不起作用。我尝试了 getAbsolutePath() 和 getPath(),但它没有返回正确的路径。你可以试试,你会看到结果。 @Seshu Vinay anwser 是错误的。文件无法创建以方案字符串file:// 开头的对象。 @Yaqub Ahmad 在 uri.getPath 字符串之后使用 URLDecoder.decode 纠正这种用法:File myFile = new File(uri.getPath()); - 适用于 file://... URI。 不工作。 API 23 测试【参考方案2】:

这是问题的答案 here

其实我们得从Camera Application的shareable ContentProvider中获取。

编辑。复制对我有用的答案

private String getRealPathFromURI(Uri contentUri) 
    String[] proj =  MediaStore.Images.Media.DATA ;
    CursorLoader loader = new CursorLoader(mContext, contentUri, proj, null, null, null);
    Cursor cursor = loader.loadInBackground();
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    String result = cursor.getString(column_index);
    cursor.close();
    return result;

【讨论】:

这是为我的物理设备获取“真实”文件路径的唯一方法。我不知道为什么,但我的设备和我的模拟器以不同的方式工作。 MediaStore.Images.Media.DATA 已弃用

以上是关于如何从 URI 中获取文件路径? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从android pie中的内容uri获取文件路径

如何从 Uri xamarin android 获取实际路径

怎么获取oss文件object的uri

存储访问框架获取正确的 Uri 路径删除/编辑/获取文件

从android中的文件路径获取内容uri

从内容 URI 中获取搜索图像的绝对文件路径