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()
}
}
通过安卓手机USB端口连接电脑进行调试,在Android Studio中运行app后,使用Device Explorer能够在/data/data/com.example.activitytest/files目录查看到文件testdata01,但是在真实的手机内无法找到文件testdata01。 请问找不到文件的原因是什么? 应该如何在真实手机内找到文件?
在Android设备上,应用的数据文件通常存储在应用的私有目录中,这些目录对其他应用和用户是不可见的。具体来说,文件被存储在/data/data/<package_name>/files
目录下,这个目录只有应用本身和设备的root用户可以访问。
在真实的手机上,除非你的设备已经root,否则你无法直接访问这个目录。即使通过文件管理器也无法看到这些文件,因为它们被系统保护起来以确保应用数据的安全性和隐私性。
使用Android Studio的Device File Explorer: 你已经提到你可以通过Android Studio的Device File Explorer查看文件。这是开发过程中最常用的方法,因为它允许你在调试时查看和操作应用的私有文件。
将文件保存到公共存储: 如果你需要在真实设备上查看文件,可以将文件保存到公共存储目录,如外部存储(SD卡)或公共的内部存储目录。请注意,保存到公共存储需要申请相应的权限。
例如,将文件保存到外部存储的代码如下:
private fun saveToExternalStorage(inputText: String) {
if (isExternalStorageWritable()) {
val file = File(getExternalFilesDir(null), "testdata01")
try {
val writer = BufferedWriter(FileWriter(file))
writer.use {
it.write(inputText)
}
Toast.makeText(this, "File saved to external storage", Toast.LENGTH_SHORT).show()
} catch (e: IOException) {
e.printStackTrace()
}
} else {
Toast.makeText(this, "External storage not writable", Toast.LENGTH_SHORT).show()
}
}
private fun isExternalStorageWritable(): Boolean {
return Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED
}
记得在AndroidManifest.xml
中添加权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
使用ContentProvider:
如果你需要与其他应用共享文件,可以使用ContentProvider
。ContentProvider
允许你控制对应用数据的访问,并且可以提供更细粒度的权限控制。
在真实设备上无法直接访问应用的私有文件是Android系统的设计使然,目的是为了保护用户数据的安全。如果你需要在真实设备上查看文件,可以考虑将文件保存到公共存储或使用其他方法来共享文件。