日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【Android 文件管理】分区存储 ( 修改与删除图片文件 )

發布時間:2025/6/17 Android 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android 文件管理】分区存储 ( 修改与删除图片文件 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、分區存儲模式下使用 MediaStore 修改圖片
  • 二、分區存儲模式下使用 MediaStore 刪除圖片
  • 三、相關文檔資料

Android 分區存儲系列博客 :

  • 【Android 文件管理】應用可訪問的存儲空間 ( 存儲空間分類 | 存儲空間訪問權限 | 分區存儲 )
  • 【Android 文件管理】分區存儲 ( 分區存儲機制 和 文件索引數據 )
  • 【Android 文件管理】分區存儲 ( MediaStore 文件操作 )
  • 【Android 文件管理】分區存儲 ( 創建與查詢圖片文件 )
  • 【Android 文件管理】分區存儲 ( 修改與刪除圖片文件 )

在上一篇博客 【Android 文件管理】分區存儲 ( 創建與查詢圖片文件 ) 中 , 使用 MediaStore 在外置存儲 SD 卡中的 Pictures 目錄中 , 創建 了 image.jpg 圖片文件 , 并進行了 查詢 ;

本篇博客講解使用 MediaStore 修改 , 刪除 圖片文件操作 ;





一、分區存儲模式下使用 MediaStore 修改圖片



將 /sdcard/Pictures/image/ 目錄下的 image.jpg 修改為 image_update.jpg ;


分區存儲機制中 , 刪除圖片文件 , 不能通過獲取其絕對路徑進行刪除 , 必須先使用 MediaStore 查詢到圖片文件的 Uri , 然后通過 Uri 執行 刪除 / 修改 圖片文件的操作 ;


查詢圖片 : 查詢圖片文件的具體原理參考 【Android 文件管理】分區存儲 ( 創建與查詢圖片文件 ) , 不再詳細分析 ;

首先 , 調用 getContentResolver 方法獲取 ContentResolver , 執行 query 查詢方法 ; 傳入 查詢的 Uri , 指定要查詢的列 , 查詢語句, 查詢參數 , 排列規則 , 555 個參數 , 查詢結果是 Cursor 對象 ;

// 查詢 SQLite 數據庫 var cursor = contentResolver.query(// 指定要查詢的 UriMediaStore.Images.Media.EXTERNAL_CONTENT_URI,// 指定要查詢的列null,// 指定查詢語句"${MediaStore.Images.Media.DISPLAY_NAME}=?",// 指定查詢參數arrayOf("image.jpg"),// 排序規則null )

然后 , 從 Cursor 中獲取 MediaStore.Images.Media._ID 字段對應的值 , 通過 ContentUris 的 withAppendedId 方法 , 將 _id 字段值轉為 Uri , 并保存在外部變量中 ;

// 要刪除的圖片對應的 Uri, 需要先查詢出來 var uri: Uri?= null// 先獲取該圖片在數據庫中的 id , 然后通過 id 獲取 Uri if (cursor != null && cursor.moveToFirst()){// 獲取第 0 行 _id 所在列的值var id = cursor.getLong(// 獲取 _id 所在列的索引cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID))// 通過 _id 字段獲取圖片 Uriuri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);Log.i(TAG, "查詢到的 Uri = $uri , 開始準備刪除")// 關閉游標cursor.close() }

得到了圖片的 Uri 地址 , 就可以對圖片進行 刪除 / 修改 操作了 ; 在 分區存儲機制 中 , 只能通過文件的 Uri 地址操作文件的 增 刪 查 改 ;


修改圖片 : 構造 ContentValues , 將 display_name 修改成 image_update , 設置 MediaStore.Images.ImageColumns.DISPLAY_NAME 字段對應的值為 “image_update.jpg” , 然后 調用 getContentResolver 方法獲取 ContentResolver , 調用 update 方法 , 更新圖片 Uri 對應的數據 , 將上述 ContentValues 更新到 Uri 對應的數據庫表中 ;

// 修改圖片 // 構造 ContentValues var contentValues: ContentValues = ContentValues(); // 將 display_name 修改成 image_update contentValues.put(MediaStore.Images.ImageColumns.DISPLAY_NAME, "image_update.jpg")// 修改文件名稱 var row = contentResolver.update(uri!!, contentValues, null, null) Log.i(TAG, "修改 uri = $uri 結果 row = $row")

查詢 并 修改 圖片文件代碼示例 :

/*** 修改圖片*/ fun updateImages(){// 要刪除的圖片對應的 Uri, 需要先查詢出來var uri: Uri?= null// 查詢 SQLite 數據庫var cursor = contentResolver.query(// 指定要查詢的 UriMediaStore.Images.Media.EXTERNAL_CONTENT_URI,// 指定要查詢的列null,// 指定查詢語句"${MediaStore.Images.Media.DISPLAY_NAME}=?",// 指定查詢參數arrayOf("image.jpg"),// 排序規則null)// 先獲取該圖片在數據庫中的 id , 然后通過 id 獲取 Uriif (cursor != null && cursor.moveToFirst()){// 獲取第 0 行 _id 所在列的值var id = cursor.getLong(// 獲取 _id 所在列的索引cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID))// 通過 _id 字段獲取圖片 Uriuri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);Log.i(TAG, "查詢到的 Uri = $uri , 開始準備修改")// 關閉游標cursor.close()}// 修改圖片// 構造 ContentValuesvar contentValues: ContentValues = ContentValues();// 將 display_name 修改成 image_updatecontentValues.put(MediaStore.Images.ImageColumns.DISPLAY_NAME, "image_update.jpg")// 修改文件名稱var row = contentResolver.update(uri!!, contentValues, null, null)Log.i(TAG, "修改 uri = $uri 結果 row = $row") } /**

日志打印結果 :

查詢到的 Uri = content://media/external/images/media/53 , 開始準備修改 修改 uri = content://media/external/images/media/53 結果 row = 1

文件刪除效果 : 在 /sdcard/Pictures/image/ 目錄中 , image.jpg 文件已經被修改為 image_update.jpg 文件 ;





二、分區存儲模式下使用 MediaStore 刪除圖片



將 /sdcard/Pictures/image/ 目錄下的 image_update.jpg 文件刪除 ;


分區存儲機制中 , 刪除圖片文件 , 不能通過獲取其絕對路徑進行刪除 , 必須先使用 MediaStore 查詢到圖片文件的 Uri , 然后通過 Uri 執行 刪除 / 修改 圖片文件的操作 ;


查詢圖片 : 查詢圖片文件的具體原理參考 【Android 文件管理】分區存儲 ( 創建與查詢圖片文件 ) , 不再詳細分析 ;

首先 , 調用 getContentResolver 方法獲取 ContentResolver , 執行 query 查詢方法 ; 傳入 查詢的 Uri , 指定要查詢的列 , 查詢語句, 查詢參數 , 排列規則 , 555 個參數 , 查詢結果是 Cursor 對象 ;

// 查詢 SQLite 數據庫 var cursor = contentResolver.query(// 指定要查詢的 UriMediaStore.Images.Media.EXTERNAL_CONTENT_URI,// 指定要查詢的列null,// 指定查詢語句"${MediaStore.Images.Media.DISPLAY_NAME}=?",// 指定查詢參數arrayOf("image_update.jpg"),// 排序規則null )

然后 , 從 Cursor 中獲取 MediaStore.Images.Media._ID 字段對應的值 , 通過 ContentUris 的 withAppendedId 方法 , 將 _id 字段值轉為 Uri , 并保存在外部變量中 ;

// 要刪除的圖片對應的 Uri, 需要先查詢出來 var uri: Uri?= null// 先獲取該圖片在數據庫中的 id , 然后通過 id 獲取 Uri if (cursor != null && cursor.moveToFirst()){// 獲取第 0 行 _id 所在列的值var id = cursor.getLong(// 獲取 _id 所在列的索引cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID))// 通過 _id 字段獲取圖片 Uriuri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);Log.i(TAG, "查詢到的 Uri = $uri , 開始準備刪除")// 關閉游標cursor.close() }

得到了圖片的 Uri 地址 , 就可以對圖片進行 刪除 / 修改 操作了 ; 在 分區存儲機制 中 , 只能通過文件的 Uri 地址操作文件的 增 刪 查 改 ;


刪除圖片 : 調用 getContentResolver 方法獲取 ContentResolver , 直接刪除之前查詢出的圖片 Uri 即可 ;

// 刪除圖片 var row = contentResolver.delete(uri!!, null, null)Log.i(TAG, "刪除 uri = $uri 結果 row = $row")

查詢 并 刪除 圖片文件代碼示例 :

/*** 刪除圖片*/ fun deleteImages(){// 要刪除的圖片對應的 Uri, 需要先查詢出來var uri: Uri?= null// 查詢 SQLite 數據庫var cursor = contentResolver.query(// 指定要查詢的 UriMediaStore.Images.Media.EXTERNAL_CONTENT_URI,// 指定要查詢的列null,// 指定查詢語句"${MediaStore.Images.Media.DISPLAY_NAME}=?",// 指定查詢參數arrayOf("image_update.jpg"),// 排序規則null)// 先獲取該圖片在數據庫中的 id , 然后通過 id 獲取 Uriif (cursor != null && cursor.moveToFirst()){// 獲取第 0 行 _id 所在列的值var id = cursor.getLong(// 獲取 _id 所在列的索引cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID))// 通過 _id 字段獲取圖片 Uriuri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);Log.i(TAG, "查詢到的 Uri = $uri , 開始準備刪除")// 關閉游標cursor.close()}// 刪除圖片var row = contentResolver.delete(uri!!, null, null)Log.i(TAG, "刪除 uri = $uri 結果 row = $row") }

日志打印結果 :

查詢到的 Uri = content://media/external/images/media/53 , 開始準備刪除 刪除 uri = content://media/external/images/media/53 結果 row = 1

文件刪除效果 : 在 /sdcard/Pictures/image/ 目錄中 , image_update.jpg 文件已經被刪除 ;





三、相關文檔資料



Android 文件處理參考文檔 :

  • 數據和文件存儲概覽 : https://developer.android.google.cn/training/data-storage

  • 訪問應用專屬文件 : https://developer.android.google.cn/training/data-storage/app-specific#kotlin

  • 保存到共享的存儲空間 : https://developer.android.google.cn/training/data-storage/shared

  • 管理存儲設備上的所有文件 : https://developer.android.google.cn/training/data-storage/manage-all-files

  • 分享文件 : https://developer.android.google.cn/training/secure-file-sharing

  • 應用安裝位置 : https://developer.android.google.cn/guide/topics/data/install-location

  • Android 存儲用例和最佳做法 : https://developer.android.google.cn/training/data-storage/use-cases

  • FileProvider : https://developer.android.google.cn/reference/androidx/core/content/FileProvider


博客源碼 :

  • GitHub : https://github.com/han1202012/File

  • CSDN : https://download.csdn.net/download/han1202012/18935612

總結

以上是生活随笔為你收集整理的【Android 文件管理】分区存储 ( 修改与删除图片文件 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。