适用于各个版本的File转Uri,Uri转File
来源:互联网 发布:python 读取 csv 编辑:程序博客网 时间:2024/05/25 01:36
file.toURI()报错?下面我来告诉你如何正确的File与Uri的互相转换。
在进行Android项目时,经常会用到各种文件,必然会用到Uri和File这两种路径格式,他们两之间的互相转换也必不可少。
在Android中文件的Uri地址比较特殊,一般如下:
content://media/external/images/media/62026
Uri转File
先来看看如何由Uri得到File,其中的Context必不可少。
public static File getFileByUri(Uri uri,Context context) { String path = null; if ("file".equals(uri.getScheme())) { path = uri.getEncodedPath(); if (path != null) { path = Uri.decode(path); ContentResolver cr = context.getContentResolver(); StringBuffer buff = new StringBuffer(); buff.append("(").append(MediaStore.Images.ImageColumns.DATA).append("=").append("'" + path + "'").append(")"); Cursor cur = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[] { MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA }, buff.toString(), null, null); int index = 0; int dataIdx = 0; for (cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) { index = cur.getColumnIndex(MediaStore.Images.ImageColumns._ID); index = cur.getInt(index); dataIdx = cur.getColumnIndex(MediaStore.Images.ImageColumns.DATA); path = cur.getString(dataIdx); } cur.close(); if (index == 0) { } else { Uri u = Uri.parse("content://media/external/images/media/" + index); System.out.println("temp uri is :" + u); } } if (path != null) { return new File(path); } } else if ("content".equals(uri.getScheme())) { // 4.2.2以后 String[] proj = { MediaStore.Images.Media.DATA }; Cursor cursor = context.getContentResolver().query(uri, proj, null, null, null); if (cursor.moveToFirst()) { int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); path = cursor.getString(columnIndex); } cursor.close(); return new File(path); } else { //Log.i(TAG, "Uri Scheme:" + uri.getScheme()); } return null; }
File转Uri
由File得到Uri,同样也需要context。
public static Uri getImageContentUri(Context context,File imageFile) { String filePath = imageFile.getAbsolutePath(); Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[] { MediaStore.Images.Media._ID }, MediaStore.Images.Media.DATA + "=? ", new String[] { filePath }, null); if (cursor != null && cursor.moveToFirst()) { int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID)); Uri baseUri = Uri.parse("content://media/external/images/media"); return Uri.withAppendedPath(baseUri, "" + id); } else { if (imageFile.exists()) { ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.DATA, filePath); return context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); } else { return null; } }}
由此可见,File与Uri的互相并不是那么容易,上面的代码可直接粘贴到项目中使用。如有不明白的地方可以在下方留言。
转载请注明:半白色 » 适用于各个版本的File转Uri,Uri转File
阅读全文
0 0
- 适用于各个版本的File转Uri,Uri转File
- Android File转Uri
- Android:content uri转 file uri
- 将URI转变成file
- Path File URI
- uri转换到file
- android uri to file
- Android File Uri的转换path出错
- 京东上传头像+uri与file的互转+照片的保存
- android.net.Uri to File
- android uri , file , string 互转
- Android 从URI 到 File
- uri,file,path互相转化
- file,uri,path相互转化
- uri,file,path互相转化
- 提供的 URI 方案“file”无效;应为“http”。
- 文件File path与content:// Uri的相互转换
- android Uri获取真实路径转换成File的方法
- c#ftp操作全解:创建删除目录,上传下载文件,删除移动文件,文件改名,文件目录查询
- Populating Next Right Pointers in Each Node II问题及解法
- storm集群安装配置
- c#连接mysql数据库,增删查改命令执行
- 拦截器(19)
- 适用于各个版本的File转Uri,Uri转File
- 面试题---数值的整数次方
- OS学习笔记一
- iMX6开发板—SABER Lite评估板-imx.6评估板学习qnx
- 洛谷 小A点菜
- c#获取网页源码全解
- 随笔
- 关于对象属性行为configurable的问题
- c#文件操作xml、ini、txt、excel、csv操作全解