You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

安卓应用外部存储文件保存路径及代码实现咨询

你的外部存储文件保存路径详解

咱们先结合你贴的代码来拆解路径问题:你用了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

火山引擎 最新活动