Android 根据Uri删除文件

简介:   从合理利用内存的角度出发,在开发的过程中,用不到的file要进行回收。在需要使用系统应用时,数据的传输需要用Uri,本篇博客就是对根据Uri删除文件的知识总结。

  从合理利用内存的角度出发,在开发的过程中,用不到的file要进行回收。在需要使用系统应用时,数据的传输需要用Uri,本篇博客就是对根据Uri删除文件的知识总结。


Uri的两种形式:
  1. 以“content://”开头的
  2. 以“file://”开头的
在Android 7.0中,应用间的数据交互,必须以content://开头。

以“content://”开头的

context.getContentResolver().delete(uri, null, null);

以“file://”开头的

File file = new File(FileUtils.getRealFilePath(context,uri));
if (file.exists()&& file.isFile()){
    file.delete();
}

  先把uri转换成path后,创建文件。判断是否存在,是不是文件而不是文件夹,最后调用delete()删除。有人说,这种删除方法,会把文件内容删掉,留一个空文件,我测试的时候还没有碰到。
  uri转换成path的方法,借鉴其他人的文章,现在找不到文章了。

/**
 * Try to return the absolute file path from the given Uri
 *
 * @param context
 * @param uri
 * @return the file path or null
 */
 public static String getRealFilePath(final Context context, final Uri uri ) {
     if ( null == uri ) return null;
     final String scheme = uri.getScheme();
     String data = null;
     if ( scheme == null ){
         data = uri.getPath();
     else if ( ContentResolver.SCHEME_FILE.equals( scheme ) ) {
         data = uri.getPath();
     } else if ( ContentResolver.SCHEME_CONTENT.equals( scheme ) ) {
         Cursor cursor = context.getContentResolver().query( uri, new String[] { MediaStore.Images.ImageColumns.DATA }, null, null, null );
         if ( null != cursor ) {
             if ( cursor.moveToFirst() ) {
                 int index = cursor.getColumnIndex( MediaStore.Images.ImageColumns.DATA );
                 if ( index > -1 ) {
                     data = cursor.getString( index );
                 }
             }
             cursor.close();
         }
     }
     return data;
 }

综合成一个方法:

 public void deleteUri(Context context, Uri uri) {

     if (uri.toString().startsWith("content://")) {
         // content://开头的Uri
         context.getContentResolver().delete(uri, null, null);
     } else {
         File file = new File(FileUtils.getRealFilePath(context,uri));
         if (file.exists()&& file.isFile()){
             file.delete();
         }
     }
 }
目录
相关文章
|
2月前
|
Android开发
安卓SO层开发 -- 编译指定平台的SO文件
安卓SO层开发 -- 编译指定平台的SO文件
31 0
|
4月前
|
XML Java Android开发
Android App开发网络通信中使用okhttp下载和上传图片、文件讲解及实战(超详细实现用户注册信息上传 附源码)
Android App开发网络通信中使用okhttp下载和上传图片、文件讲解及实战(超详细实现用户注册信息上传 附源码)
138 0
|
6月前
|
XML 前端开发 Android开发
android 前端常用布局文件升级总结(二)
android 前端常用布局文件升级总结(二)
|
1天前
|
存储 Java API
Android系统 文件访问权限笔记
Android系统 文件访问权限笔记
8 1
|
1天前
|
移动开发 Java Unix
Android系统 自动加载自定义JAR文件
Android系统 自动加载自定义JAR文件
8 1
|
1天前
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
7 1
|
1天前
|
Android开发
Android源代码定制:添加customize.mk文件进行分项目和分客户的定制
Android源代码定制:添加customize.mk文件进行分项目和分客户的定制
2 0
|
2月前
|
JSON Java Go
|
2月前
|
算法 Java Android开发
安卓逆向 -- 调用其他APK的SO文件
安卓逆向 -- 调用其他APK的SO文件
17 0
|
2月前
|
Android开发
安卓逆向 -- Hook多个dex文件
安卓逆向 -- Hook多个dex文件
19 1