【问题标题】:Java thinks my home folder is the C drive?Java认为我的主文件夹是C盘?
【发布时间】:2012-10-02 15:16:39
【问题描述】:

由于某种原因,我一定是更改了一些配置或其他东西,因为在一个全新的项目中,我正在输入以下内容:

System.out.println(System.getProperty("user.home"));

并获得以下输出:

C:\

而以前,它曾经返回类似C:\Users\...

有需要清除的配置文件吗?

【问题讨论】:

  • 在 Windows XP 中实际返回文字文本 %HOME%...
  • @pb2q 这只是打印%HOME%,即使在我的机器上(Win7/8/XP/Server 2003)。 Windows 上没有HOME,就像 Unix 中一样,如果你定义它,Java 几乎肯定不会使用它。
  • 在命令提示符中输入 set 并查看 HOMEPATH 环境变量。
  • 呸窗户。对不起:输入echo %HOMEDRIVE%echo %HOMEPATH%
  • HOMEPATH 变量对我来说是正确的。

标签: java windows


【解决方案1】:

当您在代码中调用“System.getProperty("user.home");”时,JVM 不会使用 Windows 环境变量来确定用户配置文件的位置,而是访问引用用户桌面目录的注册表项。然后它获取桌面的父目录,并假定这是用户的配置文件目录。因此,请检查HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\ 中您桌面目录的注册表项并相应地更新它。如果您的桌面目录的注册键值是“C:\\”,那么当您在代码中调用“System.getProperty("user.home");”时,JVM 会返回值“C:\”。例如,如果您可以将注册表中的桌面键输入修改为“C:\Users\YourName\Desktop”,那么在您的代码中调用“System.getProperty("user.home");”时,您将得到“C:\Users\YourName”。

谢谢!

【讨论】:

  • 还应该注意这个逻辑是错误的——不能保证桌面文件夹的父级是一个合理的地方。它甚至可能不属于用户,例如,如果桌面文件夹类似于\\fileserver\desktops\alice。所以最好完全避免使用user.home 属性。
猜你喜欢
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多