你能否在Java命令行中设置当前运行目录?

22

我正在命令行中运行Java应用程序,是否可以指定命令行参数将当前运行目录设置为与实际运行应用程序的位置不同的其他目录?


不确定这是否是重复的,但可能会有所帮助 https://dev59.com/w3RA5IYBdhLWcg3wwwvD - khachik
是的,那可能会有帮助。new File(parent, path) 可能有效。我需要试一下。我发帖问这个问题的原因是我正在尝试在我的应用程序中加载一个dll并对其进行分析。由于我必须基本上对java.exe进行分析,当前工作目录被设置为我的jdk文件夹,并且扰乱了我的应用程序中的相对路径。 - user538442
你的分析器应该有一个设置起始目录的选项。或者也可以编写一个BAT文件并告诉分析器运行它? - Sergei Tachenov
它确实有影响,但由于某种原因,当我设置它时应用程序无法运行。 - user538442
4个回答

44

有一个 JVM 参数 -Duser.dir,可以用于设置 JVM 的工作目录。


除非你想在程序中出现一些不一致的行为,否则不要这样做。例如,new File("file.txt").getAbsolutePath()new File("file.txt").getCanonicalPath()会遵循属性的值。但是File的大多数其他方法都不会。 - reddot

6

如果可能的话,我更愿意使用脚本来运行Java应用程序并在脚本中设置目录:

#!/bin/sh
cd <your dir>
java <some arguments>

JNI解决方案可能会影响您应用程序中的所有相关路径,例如您设置的类路径。


0

我发现了这篇 Stack Overflow 的帖子,它帮助我解决了我的问题。虽然我想分享一些关于 IntelliJ 的具体内容,可能会让其他人遇到困难。

我在下面发布了一张图片,其中使用了 -Duser.dir 标志,并且填写了工作目录文本字段。

"Working Directory" field has lower precedence than the -Duser.dir flag.

在这种情况下,工作目录将被设置为“JarLearning”,而不是“2ndTry”。

0
如果您想要更改当前目录,您需要使用JNI并从Java代码中调用本地API。例如,在Windows上,您可以使用SetCurrentDirectory

我正在使用JNI,这可能是一个可行的解决方案。 - user538442
当然,这会使您的代码完全不可移植。 - Jim Garrison

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接