Android文件保存路径解析及规律总结

使用 GPT-4o 回答,作者 GPT4oMini.app

问题:

Android开发,用Kotlin语言。实现一个文件保存的功能,代码如下: private fun save_2(inputText: String) { try { val file = File(getExternalFilesDir(null), "testdata02") val writer = BufferedWriter(FileWriter(file)) writer.use { it.write(inputText) } } catch (e: IOException) { e.printStackTrace() } } 在Android设备上,getExternalFilesDir(null) 方法返回的是应用的外部文件目录。这个目录是专门为应用存储外部文件而设计的,其他应用无法访问这个目录。具体路径因设备和Android版本而异,但通常会在以下路径之一: 路径1:/storage/emulated/0/Android/data/<your_package_name>/files/ 路径2:/sdcard/Android/data/<your_package_name>/files/

请问什么情况会保存到路径1,什么情况下会保存到路径2?有什么规律可循吗?

答案:

在Android设备上,getExternalFilesDir(null) 方法返回的是应用的外部文件目录。这个目录的具体路径因设备和Android版本而异,但通常会在以下路径之一:

  1. /storage/emulated/0/Android/data/<your_package_name>/files/
  2. /sdcard/Android/data/<your_package_name>/files/

规律和情况

  1. 设备的存储结构

    • 路径1 (/storage/emulated/0/Android/data/<your_package_name>/files/) 通常是现代Android设备的默认路径。这些设备使用了统一的存储结构,/storage/emulated/0 是一个虚拟路径,指向设备的内部存储。
    • 路径2 (/sdcard/Android/data/<your_package_name>/files/) 是较老的设备或某些特定设备的路径,这些设备可能仍然使用传统的SD卡路径表示法。
  2. Android版本

    • 在较新的Android版本(如Android 6.0及以上),设备通常会使用路径1。
    • 在较旧的Android版本(如Android 5.0及以下),设备可能会使用路径2。
  3. 设备制造商和定制ROM

    • 不同的设备制造商可能会有不同的存储路径实现,特别是在使用定制ROM的情况下。
  4. SD卡的存在与否

    • 如果设备有外部SD卡插入,某些设备可能会将外部存储路径映射到SD卡上,这种情况下路径可能会有所不同。

如何确定实际路径

为了确定实际的存储路径,可以在代码中打印出路径:

val externalFilesDir = getExternalFilesDir(null)
Log.d("FileSavePath", "External Files Dir: ${externalFilesDir?.absolutePath}")

这将帮助你在运行时查看实际的存储路径。

代码示例

以下是你提供的代码,添加了路径打印的部分:

private fun save_2(inputText: String) {
    try {
        val file = File(getExternalFilesDir(null), "testdata02")
        Log.d("FileSavePath", "External Files Dir: ${file.absolutePath}")
        val writer = BufferedWriter(FileWriter(file))
        writer.use {
            it.write(inputText)
        }
    } catch (e: IOException) {
        e.printStackTrace()
    }
}

通过这种方式,你可以在日志中查看实际的存储路径,并根据设备和Android版本的不同,了解路径的选择规律。