Kotlin文件读写与SharedPreferences存储功能实现方法
go2coding 人气:0在项目中,有些重要的数据需要保存在手机中,在手机中为了数据的安全需要把存储分为内部存储和外部sd卡存储。
内部存储
存储在内部的数据是比较安全的,别的app是无法访问到你的内部数据,只有自己的app才有读写的权限。
AndroidManifest.xml
中添加权限:
<!-- SD卡读写权限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
读写文件跟java
的代码没有太多的区别:
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
写入数据,读取数据 FileInputStream
:
val fileInputStream:FileInputStream try { fileInputStream = openFileInput(file) var datab = fileInputStream.readBytes() println(datab.toString(Charset.defaultCharset())) fileInputStream.close() }catch (e: Exception){ e.printStackTrace() }
这就是内部文件的操作,如果还需要规范的数据,可以使用SharedPreferences
他是一种key
,value
形式的字符串。
数据放在目录 / data/data/your_app_package_name/shared_prefs /
下,可以被处在同一个应用中的所有 Activity 访问。
读写方式如下:
声明主体:sps = getSharedPreferences("shareTest",Context.MODE_PRIVATE)
写入数值
fun writeShareString(key:String,value:String){ var editor:SharedPreferences.Editor = sps!!.edit() editor.putString(key,value) editor.commit() }
读取数值
fun readString(key:String):String?{ if (!key.isNullOrBlank()){ return sps!!.getString(key,null) } return null }
外部数据读取
这里的外部数据指的是通常我们说的sd卡数据。读取的时候需要用到一些权限,可以在代码中进行申请,
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) } } }
如果还出现 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
,并写入相应的数据,相应的也可以进行读数据。
小结
app中产生的数据是重要的,我们不希望自己的数据随随便便就别人拿走,也不能随意的访问别人的文件,至于文件的操作其实大部分的编程都是差不多的。
加载全部内容