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

如何更改捆绑Java程序的工作目录,java,netbeans,bundle,executable,Java,Netbeans,Bundle,Executable,我用Java编写了一个程序,并使用Netbeans将其打包为Mac应用程序。它有典型的Java、MacOS、资源和插件文件夹,工作正常。问题是我的程序有一个保存功能,无论何时使用,它都会将文件保存到计算机的用户目录,而不是程序本身运行Java文件夹的目录 在过去,我通过一个包含行的自定义可执行文件来解决这个问题 # Set the working directory DIR=$(cd "$(dirname "$0")"; pwd) cd $DIR 但由于Netbeans现在创建可执行文件并以某

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

在过去,我通过一个包含行的自定义可执行文件来解决这个问题

# Set the working directory
DIR=$(cd "$(dirname "$0")"; pwd)
cd $DIR
但由于Netbeans现在创建可执行文件并以某种不可读的方式对其进行编码,因此这不是一个选项。我会使用旧版本,但Netbeans增加了将JRE与程序捆绑的好处,因此我不得不在正确的地点保存或捆绑JRE之间做出选择

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

··············································•••••••••••

编辑:

我接受了泰勒的建议,决定在程序本身中找到我想要的目录,而不是试图用脚本更改PWD

假设您通过双击Jar文件或使用terminal/cmd来运行它(这只能通过直接运行而不是通过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的工作目录。

      您不应该依赖当前目录来确定文件的保存位置。使用环境变量或其他配置选项。您能提供一个示例吗?我对这类事情不太熟悉。请注意,这应该在Mac电脑上运行。对于其他平台,可以运行shell命令
      set
      ,查看哪些环境变量可用。你也可以考虑在你的安装过程中添加一个新的环境变量,如果其中一个不符合你的需要。对不起,我重读我的文章。不太清楚。我想做的是将文件保存到运行jar文件的目录,而不是用户的主目录。所以一旦打包好,我想保存到应用程序的“Java”文件夹中。有办法吗?啊,明白了。这可能不是你所需要的,但看起来很接近。谢谢你的引导。简单地找到我想要的目录比更改程序的工作目录更合适,这可能会导致其他问题,这是有道理的。我会用我的发现更新我的问题。