Android Kotlin的getOutputDirectory函数如何转Java及理解逻辑
Kotlin目录获取代码逻辑说明与Java转换
原Kotlin代码逻辑
这段代码的核心作用是为App选择合适的文件存储目录,优先级为外部可共享媒体目录 > 内部私有目录,逻辑拆分如下:
- 首先调用
externalMediaDirs获取系统提供的App专属外部媒体目录数组,取数组第一个非空元素 - 若拿到有效外部目录,在该路径下创建以App名称命名的子文件夹,调用
mkdirs()确保层级目录全部创建成功 - 最后校验生成的外部目录是否有效,有效则直接返回,否则返回App内部私有目录
filesDir
转换后的Java代码
工具方法实现(需写在Activity子类中)
private File getOutputDirectory() { File mediaDir = null; File[] externalMediaDirs = getExternalMediaDirs(); // 判断外部媒体目录是否可用 if (externalMediaDirs != null && externalMediaDirs.length > 0) { File rootDir = externalMediaDirs[0]; mediaDir = new File(rootDir, getResources().getString(R.string.app_name)); // 创建目录,若已存在则不会重复操作 mediaDir.mkdirs(); } // 目录有效性校验 if (mediaDir != null && mediaDir.exists()) { return mediaDir; } else { return getFilesDir(); } }
onCreate方法中调用
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 其他初始化逻辑 File outputDirectory = getOutputDirectory(); }
补充注意点
- 上述代码返回的外部媒体目录在Android 10及以上版本无需申请存储权限即可读写,目录下的文件可被系统相册、文件管理器等应用识别
- 兜底返回的
filesDir为App内部私有目录,仅当前App可访问,卸载应用时会同步删除,适合存储私有敏感文件
内容的提问来源于stack exchange,提问作者Remus Case
相关产品推荐
相关产品推荐

