網(wǎng)站首頁 編程語言 正文
在項目中,有些重要的數(shù)據(jù)需要保存在手機(jī)中,在手機(jī)中為了數(shù)據(jù)的安全需要把存儲分為內(nèi)部存儲和外部sd卡存儲。
內(nèi)部存儲
存儲在內(nèi)部的數(shù)據(jù)是比較安全的,別的app是無法訪問到你的內(nèi)部數(shù)據(jù),只有自己的app才有讀寫的權(quán)限。
AndroidManifest.xml
中添加權(quán)限:
<!-- SD卡讀寫權(quán)限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
讀寫文件跟java
的代碼沒有太多的區(qū)別:
val file:String = "1.txt" val data:String = "11111" val fileOutputStream:FileOutputStream try { var datab = data.toByteArray() fileOutputStream = openFileOutput(file, Context.MODE_PRIVATE) fileOutputStream.write(datab) fileOutputStream.close() }catch (e: Exception){ println(e.toString()) }
也是一樣的使用FileOutputStream
寫入數(shù)據(jù),讀取數(shù)據(jù) FileInputStream
:
val fileInputStream:FileInputStream try { fileInputStream = openFileInput(file) var datab = fileInputStream.readBytes() println(datab.toString(Charset.defaultCharset())) fileInputStream.close() }catch (e: Exception){ e.printStackTrace() }
這就是內(nèi)部文件的操作,如果還需要規(guī)范的數(shù)據(jù),可以使用SharedPreferences
他是一種key
,value
形式的字符串。
數(shù)據(jù)放在目錄 / data/data/your_app_package_name/shared_prefs /
下,可以被處在同一個應(yīng)用中的所有 Activity 訪問。
讀寫方式如下:
聲明主體:sps = getSharedPreferences("shareTest",Context.MODE_PRIVATE)
寫入數(shù)值
fun writeShareString(key:String,value:String){ var editor:SharedPreferences.Editor = sps!!.edit() editor.putString(key,value) editor.commit() }
讀取數(shù)值
fun readString(key:String):String?{ if (!key.isNullOrBlank()){ return sps!!.getString(key,null) } return null }
外部數(shù)據(jù)讀取
這里的外部數(shù)據(jù)指的是通常我們說的sd卡數(shù)據(jù)。讀取的時候需要用到一些權(quán)限,可以在代碼中進(jìn)行申請,
var REQUEST_CODE_PERMISSION_STORAGE = 100; var permissions = arrayOf(android.Manifest.permission.READ_EXTERNAL_STORAGE, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) permissions.forEach { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (checkSelfPermission(it) != PackageManager.PERMISSION_GRANTED) { requestPermissions(arrayOf(it), REQUEST_CODE_PERMISSION_STORAGE) } } }
如果還出現(xiàn) open failed: EACCES (Permission denied)
的問題,那可能是讀到別人的文件,你需要換個文件名試一試。
val publicPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS).toString() var file3:File = File(publicPath,"12.txt") file3.writeText("1111") var file4:File =File(publicPath,"12.txt") var ss = file4.readText()
使用getExternalStoragePublicDirectory
獲得的sd中的DOCUMENTS
目錄,新建12.txt
,并寫入相應(yīng)的數(shù)據(jù),相應(yīng)的也可以進(jìn)行讀數(shù)據(jù)。
小結(jié)
app中產(chǎn)生的數(shù)據(jù)是重要的,我們不希望自己的數(shù)據(jù)隨隨便便就別人拿走,也不能隨意的訪問別人的文件,至于文件的操作其實(shí)大部分的編程都是差不多的。
原文鏈接:https://blog.csdn.net/weixin_40425640/article/details/128038825
相關(guān)推薦
- 2022-05-08 記一個React.memo引起的bug_React
- 2023-11-14 python matlibplot將不同數(shù)據(jù)的柱狀圖和折線圖畫在同一張圖中
- 2022-06-19 Go中Writer和Reader接口的使用入門_Golang
- 2022-07-26 Fatal error in launcher: Unable to create process
- 2022-07-21 shardingjdbc+mybatisP+Seata 報錯 throw new ShouldNev
- 2022-12-03 Sql?Server中通過sql命令獲取cpu占用及產(chǎn)生鎖的sql_MsSql
- 2023-03-11 Pandas條件篩選與組合篩選的使用_python
- 2022-06-18 C語言?從根本上理解指針_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支