Android从Uri获取文件的正确方法

时间:2018-07-06 10:19:05

标签: android file pdf path uri

我使用以下方法从本地存档中选择一个PDF

startActivityForResult(Intent.createChooser(new Intent().setType("application/pdf").setAction(Intent.ACTION_GET_CONTENT), getString(R.string.str_select_file)), request_id_archive);

并管理结果:

    @Override
    protected void onActivityResult(int request_code, int result_code, Intent data) {
        super.onActivityResult(request_code, result_code, data);

        if (request_code == request_id_archive && result_code == RESULT_OK && data != null && data.getData() != null) {
            Uri myuri = data.getData();
            String mypath = myuri.getPath();
            File myfile = new File(mypath);
            Log.d("mylog1", uri.toString());
            Log.d("mylog2", uri.getPath());
            Log.d("mylog3", f.getPath());
            Log.d("mylog4", f.toString());
            Log.d("mylog5", Boolean.toString(f.exists()));
        }
        else {...}

似乎文件未成功创建。 我的日志结果是:

  • mylog1-> content:// media / external / file / 7406
  • mylog2-> / external / file / 7406
  • mylog3-> / external / file / 7406
  • mylog4-> / external / file / 7406
  • mylog5->假

方法file.exist()返回该文件不存在。为什么?

在其他代码中,我尝试为许多其他操作管理文件:

...
InputStream inputStream = new FileInputStream(file);
...

但是我在Logcat中的应用崩溃了,我看到了:

java.io.FileNotFoundException: /document/raw:/storage/emulated/0/Download/20180702_121938.pdf (No such file or directory)

我正在Android 7上测试代码。

1 个答案:

答案 0 :(得分:0)

您需要用空字符串替换'document / raw',因此需要在访问文件之前添加以下代码:

if(mypath.contains("document/raw:")){
    mypath = mypath.replace("/document/raw:","");
}