Android Java应用文件默认写入目录查询及日志存储路径推荐
Android 文件存储常见问题解答
1. Android系统中写入文件时的默认目录在哪里?
当你在Android应用里使用不带绝对路径的文件操作(比如直接写文件名),默认的写入位置是应用的私有内部存储根目录,具体路径为:
/data/data/<你的应用包名>/
这个目录是应用专属的,其他应用无法直接访问;在未root的生产设备上,甚至普通adb用户也不能直接进入,需要用特殊命令(后面会提到)。
至于外部存储,Android 10及以上已经通过Scoped Storage限制了直接写入公共目录的行为,所以现在几乎不会默认把文件写到外部存储的公共区域了。
2. new FileWriter("log.txt")写入的文件位置,以及推荐的日志存储目录
文件位置
你用这段代码写入的log.txt就在上面说的应用私有内部存储根目录里,完整路径是:
/data/data/<你的应用包名>/log.txt
在开启USB调试的生产设备上(未root),直接用adb shell cd /data/data/<你的应用包名>会提示权限拒绝,这时候可以用以下命令访问:
adb shell run-as <你的应用包名>
执行这条命令后,会自动切换到应用的专属用户身份,此时你可以用ls查看目录内容,用cat log.txt查看文件内容。
推荐的日志存储目录
根据Android官方的最佳实践,分两种场景推荐:
- 内部存储(适合敏感日志、仅应用自用的日志):
Context.getFilesDir():对应路径/data/data/<包名>/files/,用于存储需要持久保存的日志,卸载应用时会被一并删除。Context.getCacheDir():对应路径/data/data/<包名>/cache/,适合存储临时日志,系统在存储空间不足时可能自动清理该目录下的文件。
- 外部存储(适合无需保密、可能需要用户手动导出的日志):
Context.getExternalFilesDir(null):对应路径/Android/data/<包名>/files/,属于应用私有外部存储,Android 10+无需申请WRITE_EXTERNAL_STORAGE权限,卸载应用时会自动删除。Context.getExternalCacheDir():对应路径/Android/data/<包名>/cache/,用于临时缓存日志,同样无需权限,系统可能会自动清理。
如果需要让用户更方便地找到日志(比如放到Downloads目录),Android 10+需要借助MediaStore或者申请MANAGE_EXTERNAL_STORAGE权限,操作相对繁琐,因此优先推荐上述私有目录。
内容的提问来源于stack exchange,提问作者Nullptr




