要将一个Uri对象转换为File对象,可以使用以下代码:
public File getFileFromUri(Uri uri) {
String filePath = null;
if (DocumentsContract.isDocumentUri(context, uri)) {
String wholeID = DocumentsContract.getDocumentId(uri);
// Split at colon, use second item in the array
String[] splits = wholeID.split(":");
if (splits.length == 2) {
String id = splits[1];
String[] projection = {MediaStore.Images.Media.DATA};
String selection = MediaStore.Images.Media._ID + "=?";
String[] selectionArgs = {id};
Cursor cursor = context.getContentResolver()
.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection, selection, selectionArgs, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
if (cursor.moveToFirst()) {
filePath = cursor.getString(column_index);
}
cursor.close();
}
} else {
filePath = uri.getPath();
}
if (filePath != null) {
return new File(filePath);
} else {
return null;
}
}
如果Uri是一个Document Uri,它需要解析出ID才能访问文件。对于其他类型的Uri,可以使用getPath方法获得它的路径。