安卓应用外部存储文件保存路径及代码实现咨询
你的外部存储文件保存路径详解
咱们先结合你贴的代码来拆解路径问题:你用了Environment.getExternalStorageDirectory()来创建文件,这个方法的返回路径在不同Android版本上差异很大,具体分两种情况:
Android 10(API 29)及更低版本
文件会直接存在外部存储的根目录,具体路径是:/storage/emulated/0/zadTest
(如果是多用户设备,比如平板有多个账号,路径里的0会换成对应用户的ID,默认主用户是0)
Android 11(API 30)及更高版本
从Android 11开始,系统收紧了外部存储的访问权限,你的这段代码虽然能编译,但实际运行要么会触发权限异常,要么文件会被“隐藏”到应用专属的外部存储目录里,具体路径大概是:/storage/emulated/0/Android/data/[你的应用包名]/files/zadTest
这里的[你的应用包名]就是你在AndroidManifest里声明的package字段值,比如com.example.myapp。
另外给你提几个实用的小建议:
- 如果你是在Android 10及以下开发,记得在
AndroidManifest.xml里声明WRITE_EXTERNAL_STORAGE权限,还要在运行时动态申请这个权限哦 - 从Android 11开始,官方不推荐直接操作外部存储根目录了,更稳妥的做法是用
Context.getExternalFilesDir(null)来获取应用专属的外部存储目录,这样不需要额外申请权限,而且卸载应用时文件会自动被清理,修改后的代码大概是这样:
String fileName = "zadTest"; String text = "Hello World!"; // 这里的getExternalFilesDir需要Context,比如在Activity里直接用,或者传Context对象 File textFile = new File(getExternalFilesDir(null), fileName); FileOutputStream fos = null; try { fos = new FileOutputStream(textFile); fos.write(text.getBytes()); } catch (IOException e) { e.printStackTrace(); } finally { if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); // 这里别写省略号啦,补全异常处理避免资源泄漏 } } }
- 你代码里finally块的catch部分写了
...,实际开发里一定要补全异常处理,不然可能会导致文件流没正常关闭哦
内容的提问来源于stack exchange,提问作者hdw3




