我正在尝试获取文件的路径以便读取它。
这是当我单击按钮时使用当前 View 启动 OnBrowse()
的代码:
public void onBrowse(View view) {
Intent chooseFile;
Intent intent;
chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
chooseFile.addCategory(Intent.CATEGORY_OPENABLE);
chooseFile.setType("*/*");
intent = Intent.createChooser(chooseFile, "Choose a file");
startActivityForResult(intent, ACTIVITY_CHOOSE_FILE);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) return;
String path = "";
if(requestCode == ACTIVITY_CHOOSE_FILE)
{
Uri uri = data.getData();
Log.d("Path", ""+uri);
File myFile = new File(uri.getPath());
myFile.getAbsolutePath();
loadFile(myFile.getAbsolutePath());
}
}
public String getRealPathFromURI(Uri contentUri) {
String [] proj = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query( contentUri, proj, null, null,null);
if (cursor == null) return null;
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
不,一切正常,但是 myFile.getAbsolutePath()
给了我以下路径:
/document/raw:/storage/emulated/0/Download/File.txt
当我认为它应该只返回storage/emulated/0/Download/File.txt
因此,当我尝试读取该文件时,它会抛出异常。
谢谢
最佳答案
如果您只想读取 uri 的内容,那么使用输入流而不是文件要容易得多。无需翻译为文件。这也适用于 http 和 ftp uri-s
InputStream in = getContentResolver().openInputStream(uri);
loadFromInputStream(in);
关于java - uri 获取错误的文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45854657/