【问题标题】:How to change the working directory of a bundled Java program如何更改捆绑的 Java 程序的工作目录
【发布时间】:2015-06-22 14:42:10
【问题描述】:

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

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

# Set the working directory
DIR=$(cd "$(dirname "$0")"; pwd)
cd $DIR

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

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

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

编辑:

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

假设您通过双击或使用终端/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 的名称,留下你 它所在的目录。
  • 第三行占特殊字符 比如空格。

【问题讨论】:

  • 您不应依赖当前目录来确定文件的保存位置。使用环境变量或其他配置选项。
  • 你能举个例子吗?我对这种事情不太熟悉。

标签: java netbeans bundle executable


【解决方案1】:

我会使用类似的东西

System.getenv("HOME");

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

【讨论】:

  • 请注意,这应该适用于 Mac。对于其他平台,您可以运行 shell 命令set 以查看可用的环境变量。如果不存在满足您需求的环境变量,您还可以考虑在安装过程中添加一个新环境变量。
  • 对不起,我重读了我的帖子。不太清楚。我想做的是将文件保存到运行我的 jar 文件的目录,而不是用户的主目录。所以一旦打包好,我想保存到应用程序的“Java”文件夹中。有没有办法做到这一点?
  • 啊,明白了。它可能不是您所需要的,但this thread 看起来非常接近。
  • 感谢您的领导。简单地找到我想要的目录比更改程序的工作目录更合适是有道理的,这可能会导致其他问题。我会用我发现的内容更新我的问题。
猜你喜欢
  • 2014-11-08
  • 2015-02-18
  • 2023-03-14
  • 2011-04-30
  • 2021-07-24
  • 2016-04-28
  • 2016-03-14
  • 1970-01-01
  • 2011-10-12
相关资源
最近更新 更多