如何通过Okio访问应用、工作及临时目录等通用默认路径?
使用Okio访问通用默认路径的方案
1. 临时目录
你找到的FileSystem.SYSTEM_TEMPORARY_DIRECTORY是正确且最优的实现方式。这是Okio官方提供的跨平台标准API,会自动适配不同操作系统的临时目录规则(比如Windows的%TEMP%、Linux/macOS的/tmp),无需手动处理平台差异,属于稳定的推荐用法。
2. 工作目录
通过FileSystem获取工作目录是可靠且稳定的方案,并非临时实现。可以直接调用FileSystem.SYSTEM.currentWorkingDirectory()方法,该方法返回的是当前进程启动时的工作目录路径,与操作系统层面的工作目录完全一致,是Okio官方提供的标准API。
3. 应用目录(可执行文件所在位置)
Okio本身没有提供直接获取该路径的API,需要结合对应平台的原生代码实现:
- Windows:通过JNI调用
GetModuleFileNameW获取可执行文件的绝对路径,再封装为Okio的Path对象 - Linux:读取
/proc/self/exe符号链接获取可执行文件路径,转换为Okio的Path - macOS:调用
_NSGetExecutablePath函数获取可执行文件路径,再转为Okio的Path - Android:通过
Context.getApplicationInfo().sourceDir获取APK所在路径,再转换为Okio的Path
关于用户目录的推测验证
你的推测完全正确。由于不同平台(尤其是Android)对“用户目录”的定义差异极大(比如Android没有传统桌面系统的用户主目录概念,只有应用私有存储、外部存储等分区),Okio为了保持API的简洁性和跨平台一致性,没有提供统一的用户目录API。若需获取这类路径,必须对接对应平台的原生API实现。
内容的提问来源于stack exchange,提问作者Rohde Fischer
相关产品推荐
相关产品推荐

