在android中选择文件后找不到文件错误

我想在我的android app.now中打开一个.pdf文件我可以浏览pdf文件,浏览文件后,当我检查文件是否存在时,我收到文件未找到错误。 现在选择文件后,我选择的文件Uri data.getData()就像

content://com.android.externalstorage.documents/document/6333-6131:SHIDHIN.pdf

和我使用data.getData().getPath().toString()解析的路径data.getData().getPath().toString()就像

/document/6333-6131:SHIDHIN.pdf这是我的代码。 请帮我。

 // To Browse the file Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("application/pdf"); startActivityForResult(intent, PICK_FILE_REQUEST); 

选择文件后

 //onActivityResult public void onActivityResult(final int requestCode, int resultCode, Intent data) { try { switch (requestCode) { case PICK_FILE_REQUEST: if (resultCode == RESULT_OK) { try { Uri fileUri = data.getData(); String path = fileUri.getPath().toString(); File f = new File(path); if (f.exists()) { System.out.println("\n**** Uri :> "+fileUri.toString()); System.out.println("\n**** Path :> "+path.toString()); final Intent intent = new Intent(MainActivity.this, ViewPdf.class); intent.putExtra(PdfViewerActivity.EXTRA_PDFFILENAME, path); startActivity(intent); } else { System.out.println("\n**** File Not Exist :> "+path); } } catch (Exception e) { ShowDialog_Ok("Error", "Cannot Open File"); } } break; } } catch (Exception e) { } } 

这不是答案,而是一种解决方法。

 File file = new File("some_temp_path"); # you can also use app's internal cache to store the file FileOutputStream fos = new FileOutputStream(file); InputStream is = context.getContentResolver().openInputStream(uri); byte[] buffer = new byte[1024]; int len = 0; try { len = is.read(buffer); while (len != -1) { fos.write(buffer, 0, len); len = is.read(buffer); } fos.close(); } catch (IOException e) { e.printStackTrace(); } 

传递此文件的活动绝对路径。

 button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { File pdfFile = new File(Environment.getExternalStorageDirectory(), "Case Study.pdf"); try { if (pdfFile.exists()) { Uri path = Uri.fromFile(pdfFile); Intent objIntent = new Intent(Intent.ACTION_VIEW); objIntent.setDataAndType(path, "application/pdf"); objIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(objIntent); } else { Toast.makeText(MainActivity.this, "File NotFound", Toast.LENGTH_SHORT).show(); } } catch (ActivityNotFoundException e) { Toast.makeText(MainActivity.this, "No Viewer Application Found", Toast.LENGTH_SHORT).show(); } catch (Exception e) { e.printStackTrace(); } } });