在Java中查找用户主目录的最佳方法是什么?

2022-08-31 04:51:16

在Java中查找用户主目录的最佳方法是什么?

困难在于解决方案应该是跨平台的;它应该适用于Windows 2000,XP,Vista,OS X,Linux和其他Unix变体。我正在寻找一段代码,可以在所有平台上完成此操作,以及一种检测平台的方法。

根据Java错误4787931,系统属性在Windows XP上无法正常工作,因此使用此系统属性不是可接受的解决方案,因为它不是跨平台的。user.home


答案 1

您引用的 bug(bug 4787391)已在 Java 8 中修复。即使您使用的是旧版本的Java,这种方法可能仍然是最好的。这种方法似乎在很多情况下都有效。Windows上的100%防弹解决方案很难,因为Windows对主目录的含义有一个不断变化的概念。

如果对您来说还不够好,我建议您为Windows选择一个定义并使用它,并使用 获得适当的环境变量。System.getProperty("user.home")user.homeuser.homehome directorySystem.getenv(String)


答案 2

实际上,在Java 8中,正确的方法是使用:

System.getProperty("user.home");

错误 JDK-6519127 已修复,发行说明的“JDK 8 和 JDK 7 之间的不兼容性”部分指出:

区域: 核心库 / java.lang

概要

用于在 Windows 上确定用户主目录的步骤已更改为遵循 Microsoft 建议的方法。在较旧版本的 Windows 上,或者在注册表设置或环境变量设置为其他目录的情况下,可以观察到此更改。不相容性的性质

behavioral RFE

6519127

尽管这个问题很老,但我把它留待将来参考。


推荐