如何更改捆绑的 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");
- 第一行获取 Jar 文件的路径。
- 第二行
从末尾删除 Jar 的名称,留下
它所在的目录。
- 第三行占特殊字符
喜欢空格。
我会使用类似
的东西
System.getenv("HOME");
查找用户的主目录而不是更改 Java 的工作目录。
我在 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");
- 第一行获取 Jar 文件的路径。
- 第二行 从末尾删除 Jar 的名称,留下 它所在的目录。
- 第三行占特殊字符 喜欢空格。
我会使用类似
的东西System.getenv("HOME");
查找用户的主目录而不是更改 Java 的工作目录。