我用Java编写了一个程序,并使用Netbeans将其打包为Mac应用程序。它有典型的Java、MacOS、Resources和Plugins文件夹,工作得很好。问题是,我的程序有一个保存功能,每当使用时,它都会将文件保存到计算机的User目录,而不是程序本身运行的目录——Java文件夹。
在过去,我通过一个包含行的自定义可执行文件绕过了这一点
# Set the working directory
DIR=$(cd "$(dirname "$0")"; 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的工作目录。