有没有办法在Java中获取应用程序目录?

时间:2012-09-28 12:59:13

标签: java command-line

这可能是不可能的,但我想我会要求确定。我有一个批处理文件,它使用相对路径启动我的Java应用程序。 IE浏览器。我有:

应用程序\的start.bat 应用\ lib中的* .jar

我的应用程序在Application目录中创建配置文件。我的批处理脚本使用相对路径指向lib目录jar。这对我来说非常有效,因为我可以将程序移动到我想要的任何地方,它就会运行。但是现在我希望能够从命令行调用相同的应用程序,而不仅仅是从工作目录设置为Application的快捷方式。问题是我希望能够从命令行上的任何目录调用我的应用程序,现在这不起作用,因为工作目录会有所不同。

我知道我总是可以在我的应用程序中为工作目录添加另一个参数,但是我仍然需要创建一个带有应用程序硬编码路径的批处理脚本。在Java中是否有任何方法可以解决这个问题,例如获取我的主java文件所在的目录在工作目录之上?是否有启动器应用程序?

我无法将我的应用程序捆绑为jar,因为它会创建我希望与应用程序位于同一目录中的配置文件。

2 个答案:

答案 0 :(得分:3)

考虑在start.bat中改变当前目录:

@cd /d %~dp0
java ...

这会将其更改为脚本所在的文件夹。

如果需要,

pushd/popd命令也可用于保存当前目录以调用脚本。

或者可以从java中使用getClass().getProtectionDomain().getCodeSource().getLocation()来获取jar / classes的路径。

配置路径系统属性还有与路径无关的方法:

java "-DconfigDir=%~dp0" ...

答案 1 :(得分:0)

没有便携式解决方案适用于所有情况。实际上,应用程序目录的概念并不一定有意义;例如考虑使用WebStart启动的applet和应用程序。

如果应用程序或安装目录的概念确实有意义,那么支持它的最简单方法是让应用程序的启动器/启动脚本通过特定于应用程序的-D属性将其传递给应用程序Java代码。