用户工作目录:XP 与 Vista

发布于 2024-12-26 11:47:34 字数 451 浏览 1 评论 0原文

我有一个我编写的 Java 桌面应用程序。 在执行过程中,我在系统中定义的默认路径名下创建文件夹和文件。

Java.io.files 明确指出: 默认情况下,java.io 包中的类始终解析当前用户目录的相对路径名。该目录由系统属性 user.dir 命名,通常是调用 Java 虚拟机的目录。

此外,我使用 IzPack 来启用安装和快捷方式创建。

当我在 XP 计算机上运行应用程序时,安装后我会得到一个桌面快捷方式,并且提到的文件和文件夹创建位于 Izpack 安装 Jar 的位置。这是预期的行为。

但是当我在 Vista 机器上测试时,文件夹和文件是在桌面上创建的!即使 Jar 位于正确的位置(c:\program files.. 等)。

我希望这些文件创建在 Jar 所在的同一文件夹中,而且肯定不是在桌面上。

谁能给我关于这里发生的事情的任何见解?

I have a Java desktop application that I have written.
During the execution I create folders and files at the default path name defined in the system.

Java.io.files clearly states: By default the classes in the java.io package always resolve relative pathnames against the current user directory. This directory is named by the system property user.dir, and is typically the directory in which the Java virtual machine was invoked.

In addition, I am using IzPack to enable installation and shortcuts creation.

When I'm running my application on my XP computer, after the installation I get a desktop shortcut, and the mentioned files and folders creation are at the location that Izpack installed the Jar. which is the expected behavior.

But when I test this out on a Vista machine, the folders and files are created on the desktop! even though the Jar is at the correct location (c:\program files.. etc).

I want those files to be created at the same folder the Jar is in, and most certainly not at the desktop.

Can anyone give me any insights on what is going on here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

许你一世情深 2025-01-02 11:47:34

这是因为在 Vista/7 中,写入 Program Files 文件夹需要管理干预,因此 JVM 会寻找下一个可写位置作为后备:桌面(或用户文档目录)。不过,您可以在所有操作系统上以统一的方式轻松确定用户主目录,这比仅仅让 JVM 选择一个(希望如此)合理的位置要好得多。

由于这是 Windows 上 JVM 的已知错误,如果不是的话帮助,后备方法是检查系统环境变量USERPROFILE,它应该指向正确的用户主文件夹:

String userHome = System.getenv("USERPROFILE");

It's because in Vista/Seven, writing to the Program Files folder requires administrative interference, so JVM looks for the next writable location as a fallback: the Desktop (or the User Documents directory). You can easily determine the User home directory in a unified manner on all OSs, though, which is way better than just letting the JVM pick a -- hopefully -- reasonable location.

Since this is a known bug for JVM on Windows, if that doesn't help, the fallback is to check the System Environment variable USERPROFILE which should point at the correct user home folder:

String userHome = System.getenv("USERPROFILE");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文