0

我正在尝试将 Java 应用程序编译成 Mac OS X 应用程序包。我添加以下设置来设置当前工作目录:

<bundleapp...>
    ...
    <option value="-Duser.dir=$APP_ROOT/Contents/Resources"/>
</bundleapp>

在 Contents/Resources/ 中有一个配置目录。

执行它时,我得到了这个奇怪的行为:

new File("config/").exists()返回假

new File("config/").getAbsolutePath()返回 /path/to/bundled/app/MyApp.app/Contents/Resources/config

new File("config/").getAbsoluteFile().exists()返回真

我不知道为什么会发生这种情况,我想防止在我的代码中到处添加 getAbsoluteFile() 。

对此有什么想法吗?

(注意:我使用的是 Oracle JDK 8)

4

1 回答 1

1

getAbsolutePath解析当前user.dir属性的相对路径。来自javadocs

在 UNIX 系统上,通过根据当前用户目录解析相对路径名,使其成为绝对路径名。

尽管javadocs声明

默认情况下,java.io 包中的类总是根据当前用户目录解析相对路径名。此目录由系统属性 user.dir 命名,通常是调用 Java 虚拟机的目录。

此错误报告指出,相对路径的“更简单”getter(不是“绝对”)将针对调用虚拟机的路径进行解析。

于 2014-08-12T16:01:14.823 回答