Android开发,用Kotlin语言。实现一个文件保存的功能,代码如下: package com.example.activitytest
import android.content.Context import android.os.Bundle import android.widget.EditText import android.widget.Toast import java.io.*
class FileStoreActivity : BaseActivityClass() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.file_store_layout)
val inputText = load()
if (inputText.isNotEmpty()) {
val editText1: EditText = findViewById(R.id.fileStoreEdit)
editText1.setText(inputText)
editText1.setSelection(inputText.length)
Toast.makeText(this, "Restoring succeeded", Toast.LENGTH_SHORT).show()
}
}
override fun onDestroy() {
super.onDestroy()
val editText1: EditText = findViewById(R.id.fileStoreEdit)
val inputText = editText1.text.toString()
save(inputText)
}
private fun save(inputText: String) {
try {
val output = openFileOutput("testdata01", Context.MODE_PRIVATE)
val writer = BufferedWriter(OutputStreamWriter(output))
writer.use {
it.write(inputText)
}
} catch (e: IOException) {
e.printStackTrace()
}
}
private fun load(): String {
val content = StringBuilder()
try {
val input = openFileInput("testdata01")
val reader = BufferedReader(InputStreamReader(input))
reader.use {
reader.forEachLine {
content.append(it)
}
}
} catch (e: IOException) {
e.printStackTrace()
}
return content.toString()
}
}
现在需要将testdata01文件存储到公共的内部存储目录,以便在真实的手机内可以找到文件testdata01。 请修改上述代码。注意,需要采用当前最新的、主流的方法,不要采用已过时的、不推荐的方法。
要将文件存储到公共的内部存储目录,可以使用Context.getExternalFilesDir()
方法。这个方法会返回一个表示应用程序的外部文件目录的File
对象。这个目录是应用程序专用的,即使在外部存储中,其他应用程序也无法访问。
以下是修改后的代码:
package com.example.activitytest
import android.content.Context
import android.os.Bundle
import android.widget.EditText
import android.widget.Toast
import java.io.*
class FileStoreActivity : BaseActivityClass() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.file_store_layout)
val inputText = load()
if (inputText.isNotEmpty()) {
val editText1: EditText = findViewById(R.id.fileStoreEdit)
editText1.setText(inputText)
editText1.setSelection(inputText.length)
Toast.makeText(this, "Restoring succeeded", Toast.LENGTH_SHORT).show()
}
}
override fun onDestroy() {
super.onDestroy()
val editText1: EditText = findViewById(R.id.fileStoreEdit)
val inputText = editText1.text.toString()
save(inputText)
}
private fun save(inputText: String) {
try {
val file = File(getExternalFilesDir(null), "testdata01")
val writer = BufferedWriter(FileWriter(file))
writer.use {
it.write(inputText)
}
} catch (e: IOException) {
e.printStackTrace()
}
}
private fun load(): String {
val content = StringBuilder()
try {
val file = File(getExternalFilesDir(null), "testdata01")
if (file.exists()) {
val reader = BufferedReader(FileReader(file))
reader.use {
reader.forEachLine {
content.append(it)
}
}
}
} catch (e: IOException) {
e.printStackTrace()
}
return content.toString()
}
}
保存文件:
File(getExternalFilesDir(null), "testdata01")
来获取文件对象。BufferedWriter
和FileWriter
来写入文件。加载文件:
File(getExternalFilesDir(null), "testdata01")
来获取文件对象。BufferedReader
和FileReader
来读取文件内容。getExternalFilesDir(null)
方法返回的目录是应用程序专用的外部存储目录,其他应用程序无法访问。AndroidManifest.xml
中添加权限声明:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />