Android 根据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();
         }
     }
 }

你可能感兴趣的:(文件)