因本人才学疏浅,所以写得这个可能不太准确,但是,也是目前自己的一个理解,所以请各位看官请海涵。
存储方式分为三大部分:
1 SharedPreferences
2 外部储存
3 内部储存
SharedPreferences适合用于类似登陆信息,简单的配置信息,它以xml的格式进行保存,保存的位置可以通过下面的方式进行查看
image.png image.png
然后在data/data目录下找到自己的项目打开shared_prefs,就可以看到的配置的信息了
然后说下怎么使用,这个也比较简单
class SharedPreferencesActivity : AppCompatActivity() {
private lateinit var edContent:EditText
private lateinit var btnWrite:Button
private lateinit var btnRead:Button
private lateinit var tvContent:TextView
private lateinit var content:String
private lateinit var readContent:String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_shared_preferences)
initView()
onClickListener()
}
private fun onClickListener() {
btnWrite.setOnClickListener {
content=edContent.text.toString()
if (content.isEmpty()){
Toast.makeText(this,"请输入内容,内容不能为空",Toast.LENGTH_SHORT).show()
}else{
writeSp(content)
}
}
btnRead.setOnClickListener {
readSp()
}
}
private fun readSp() {
val sp=getSharedPreferences("jeffrey", Context.MODE_PRIVATE)
readContent=sp.getString("content","").toString()
tvContent.text=readContent
}
private fun writeSp(content:String) {
//创建SharedPreferences对象 参数1:文件名,参数2:保存模式,建议使用MODE_PRIVATE,只让自己的项目使用
val sp=getSharedPreferences("jeffrey", Context.MODE_PRIVATE)
//创建Editor对象
val editor=sp.edit()
//保存数据
editor.putString("content",content)
//提交,这一步十分关键,需要提交才算是保存成功
editor.commit()
}
private fun initView() {
edContent=findViewById(R.id.ed_content)
btnWrite=findViewById(R.id.btn_write)
btnRead=findViewById(R.id.btn_read)
tvContent=findViewById(R.id.tv_content)
}
}
然后外部存储,前面基本一致,只是路径设置和保存方式有点不一样
private fun onClickListener() {
//文件路径,Environment.getExternalStorageDirectory()方法已经被弃用了,而且使用
//getExternalFilesDir(null)的话还不需要申请权限的说
path=getExternalFilesDir(null)?.absolutePath+"jeffrey.txt"
val file=File(path)
btnWrite.setOnClickListener {
content=edContent.text.toString()
//判断文件是否存在
if (!file.exists()){
//创建文件
file.createNewFile()
}
//以字节流的方式输送数据
val fos=FileOutputStream(file)
fos.write(content.toByteArray())
Toast.makeText(this,"写入成功", Toast.LENGTH_SHORT).show()
}
btnRead.setOnClickListener {
val fos=FileInputStream(path)
val byte=ByteArray(1024)
val len=fos.read(byte)
readContent= String(byte,0,len)
tvContent.text=readContent
}
}
然后是内部存储,其实和外部储存方式是一样的,只是路径不同罢了
private fun onClickListener() {
val file=File(filesDir,"jeffrey.txt")
btnWrite.setOnClickListener {
content=edContent.text.toString()
if (!file.exists()){
file.createNewFile()
}
val fos=FileOutputStream(file)
fos.write(content.toByteArray())
Toast.makeText(this,"写入成功", Toast.LENGTH_SHORT).show()
}
btnRead.setOnClickListener {
val fos=FileInputStream(file)
val byte=ByteArray(1024)
val len=fos.read(byte)
readContent= String(byte,0,len)
tvContent.text=readContent
Toast.makeText(this,"读取成功", Toast.LENGTH_SHORT).show()
}
}
我这里只是简单说了下使用方法,具体储存的路径不同会造成什么不同的结果的话,建议看下这些书友写的吧,他们已经写得非常详细了
https://blog.csdn.net/u012702547/article/details/50269639
https://juejin.im/post/6844903669704425485
网友评论