[英]How to get the absolute path of a file?
我想获取从文件选择器中选择的文件的绝对路径。
我的OnActivityesult()
如下所示:
if(resultCode == RESULT_OK) {
switch(requestCode) {
case 1:
Uri pathUri = data.getData();
File userFile = new File(pathUri.getPath());
IMG_PATH = userFile.getParentFile().getAbsolutePath();
Snackbar.make(getCurrentFocus(), IMG_PATH, Snackbar.LENGTH_SHORT).show();
ShowConfirmation(IMG_PATH);
break;
}
}
但是此代码返回的类似于/document/primary:miniclipId.txt
。
我需要像mnt/sdcard1/miniclipId.txt
这样的真实路径。
用户将从sdcard或内部文件中选择.img
文件。
有人可以告诉我如何获取这样的路径字符串吗?
但是此代码的格式类似于/document/primary:miniclipId.txt。
您从ContentProvider
收到了Uri
。
我需要像mnt / sdcard1 / miniclipId.txt这样的真实路径。
Uri
不是文件。 无需存在“真实路径”,更不用说对您有意义的路径了。
使用ContentResolver
和诸如openInputStream()
类的方法来使用Uri
指向的内容 。
如果绝对需要文件,请使用openInputStream()
并将内容复制到您控制的某个文件中。
您可以使用此函数获取媒体的真实路径。只需传递您在onActivityResult()方法中获取的uri
public String mf_szGetRealPathFromURI(final Uri ac_Uri) {
String result = "";
boolean isok = false;
Cursor cursor = null;
try {
String[] proj = {MediaStore.Images.Media.DATA};
cursor = getContentResolver().query(ac_Uri, proj,
null, null, null);
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
result = cursor.getString(column_index);
isok = true;
} finally {
if (cursor != null) {
cursor.close();
}
}
return isok ? result : "";
}
这就是我多年来使用的
public static String getRealPathFromURI(Uri contentUri, Context activity) {
String path = null;
try {
final String[] proj = {MediaStore.MediaColumns.DATA};
final Cursor cursor = ((Activity) activity).managedQuery(contentUri, proj, null, null, null);
final int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
cursor.moveToFirst();
path = cursor.getString(column_index);
} catch (Exception e) {
}
if (path != null && path.length() > 0) {
return path;
} else return contentUri.getPath();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.