Windows11下Java/Kotlin获取user.home返回空如何获取用户目录
Windows 11 平台 Android Studio 获取用户目录路径解决方案
问题原因
Windows 11 环境变量配置异常、Arctic Fox 版本内置 JDK 的环境变量映射 bug 都会导致 System.getProperty("user.home") 返回空值,优先读取 Windows 原生系统环境变量可靠性更高。
方案1:读取Windows原生环境变量(Windows专属,优先级最高)
Java 实现
// 优先读取USERPROFILE环境变量,为当前用户根目录的官方标准变量 String userHome = System.getenv("USERPROFILE"); if (userHome == null || userHome.trim().isEmpty()) { // 极端场景兜底:用HOMEDRIVE+HOMEPATH拼接 String homeDrive = System.getenv("HOMEDRIVE"); String homePath = System.getenv("HOMEPATH"); userHome = homeDrive + homePath; } // 拼接目标存储路径 String savePath = userHome + "\\AppData\\Local\\你的应用配置目录名";
Kotlin 实现
// 优先读取USERPROFILE环境变量,为空时兜底拼接 val userHome = System.getenv("USERPROFILE") ?: run { val homeDrive = System.getenv("HOMEDRIVE") val homePath = System.getenv("HOMEPATH") "$homeDrive$homePath" } val savePath = "$userHome\\AppData\\Local\\你的应用配置目录名"
方案2:跨平台兼容实现(适配Windows、Mac、Linux多平台)
Java 实现
import java.nio.file.Paths; String userHome = System.getProperty("user.home", System.getenv("USERPROFILE")); // 用resolve方法自动适配路径分隔符,避免手动写斜杠出错 String savePath = Paths.get(userHome).resolve("AppData").resolve("Local").resolve("你的应用配置目录名").toString();
Kotlin 实现
import java.nio.file.Paths val userHome = System.getProperty("user.home") ?: System.getenv("USERPROFILE") val savePath = Paths.get(userHome).resolve("AppData").resolve("Local").resolve("你的应用配置目录名").toString()
额外提示
如果是开发 Android Studio 插件,可直接使用 IntelliJ 平台内置API PathManager.getSystemPath(),Windows 平台下默认直接指向当前用户的 AppData\Local\Google\AndroidStudio<对应版本号> 目录,无需自行拼接路径。
内容的提问来源于stack exchange,提问作者neelshenning
相关产品推荐
相关产品推荐

