如何更改捆绑的 Java 程序的工作目录

How to change the working directory of a bundled Java program

我在 Java 中编写了一个程序,并使用 Netbeans 将其打包为 Mac 应用程序。它具有典型的 Java、MacOS、Resources 和 Plugins 文件夹,并且工作正常。问题是我的程序有一个保存功能,无论何时使用,都会将文件保存到计算机的用户目录,而不是程序本身所在的目录 运行——Java 文件夹。

过去,我使用包含以下行的自定义可执行文件解决了这个问题

# Set the working directory
DIR=$(cd "$(dirname "[=11=]")"; pwd)
cd $DIR

但是由于 Netbeans 现在创建可执行文件并以某种不可读的方式对其进行编码,所以这不是一个选项。我会使用旧的,但 Netbeans 增加了将 JRE 与程序捆绑在一起的好处,所以我不得不在保存在正确的位置或捆绑 JRE 之间做出选择。

有谁知道如何更改打包程序的工作目录?

••••••••••••••••••••••••••••••••••••••••••••• •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• ••••••••••••••••••••••••••••••

编辑:

我听取了 Tyler 的建议,决定在程序本身中找到我想要的目录,而不是尝试使用脚本更改 PWD。

通过双击或使用 terminal/cmd 假设您是 运行 Jar 文件(这只能通过直接 运行,而不是通过 ANT 或 IDE ).这将为您提供 Jar 所在的目录:

String path1 = MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath();
String path2 = (new File(path1)).getParentFile().getPath();
String PWD = URLDecoder.decode(path2, "UTF-8");

我会使用类似

的东西
System.getenv("HOME");

查找用户的主目录而不是更改 Java 的工作目录。