[英]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.