使用Uri删除文件

时间:2017-01-18 11:05:23

标签: android

我尝试以这种方式删除文件:

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

当uri满足时,它适用于视频:// media / external / video / media / 1214但不适用于音频文件内容:// media / external / audio / media / 1212。​​

我需要删除从相机和录音机收到的文件,因为目前这些文件都在我的应用目录和SD卡上。

有人能帮助我吗?怎么了?

3 个答案:

答案 0 :(得分:2)

Kotlin扩展名:

fun File.delete(context: Context): Boolean {
   var selectionArgs = arrayOf(this.absolutePath)
   val contentResolver = context.getContentResolver()
   var where: String? = null
   var filesUri: Uri? = null
   if (android.os.Build.VERSION.SDK_INT >= 29) {
      filesUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI
      where = MediaStore.Images.Media._ID + "=?"
      selectionArgs = arrayOf(this.name)
   } else {
      where = MediaStore.MediaColumns.DATA + "=?"
      filesUri = MediaStore.Files.getContentUri("external")
   }

   val int = contentResolver.delete(filesUri!!, where, selectionArgs)

   return !this.exists()
}

像这样打电话:

val file = File(uri.path)
file.delete(applicationContext)

答案 1 :(得分:1)

你应该试试这个:

File file = new File(selectedFilePath);
boolean deleted = file.delete();

其中selectedFilePath是您要删除的文件的路径 - 例如:

/sdcard/YourCustomDirectory/ExampleFile.mp3

答案 2 :(得分:0)

下面的代码不仅删除图像文件,而且删除删除图像时留下的0Byte文件。我在Android 10中观察到此0Byte鬼文件行为。

    val fileToDelete = File(photoUri.path)
    if (fileToDelete.exists()) {
        if (fileToDelete.delete()) {
            if (fileToDelete.exists()) {
                fileToDelete.canonicalFile.delete()
                if (fileToDelete.exists()) {
                    getApplicationContext().deleteFile(fileToDelete.name)
                }
            }
            Log.e("", "File Deleted " + savedPhotoUri.path)
        } else {
            Log.e("", "File not Deleted " + savedPhotoUri.path)
        }
    }