我能获取当前正在运行的Java可执行文件的路径吗?

3
假设我想从命令行运行一个Java程序,我使用以下命令:
myExes\java\java.exe AJavaProgram

如您所见,java.exe不在我的路径中,因此我手动运行它而不是简单地使用命令java AJavaProgram
我希望程序能够返回/打印命令的第一个条目,在这种情况下,该条目为myExes\java(在其末尾包括java.exe也可以)。
有没有办法做到这一点?
最初,我认为这很简单。args[0]将返回路径,但事实并非如此。

你好,欢迎来到StackOverflow!请随意访问[帮助]以熟悉本网站。 - John Offenhartz
4个回答

8

ProcessHandle.current() 方法返回当前Java进程。您可以使用该方法查看进程句柄中的完整命令:

ProcessHandle.current().info().command().ifPresent(
    cmd -> System.out.println(cmd));

这个是最好的,因为它能够提供完整的命令。虽然这依赖于较新版本的Java。Andreas也给出了一个很好的答案,但是他错过了java.exe并且不够精确。谢谢VGR。 - Alexander Porter

1
你无法获取字符串"myExes\java\java.exe",但是你可以获取Java安装位置。
以下是在Windows 10上使用OpenJDK 14运行的结果:
System.out.println(System.getProperty("java.home"));
System.out.println(System.getProperty("sun.boot.library.path"));

输出

C:\prog\Java64\jdk-14
C:\prog\Java64\jdk-14\bin

参考信息,java.exe 的完整路径为:

C:\prog\Java64\jdk-14\bin\java.exe

如果我只是将JDK复制并粘贴到一个新文件夹中,然后从那里运行Java,它会报告新位置而不是原始位置。因此,这个答案也可以,它可以满足我的需求,但VGR更加精确,所以我必须选择他的。谢谢。 - Alexander Porter
如果你认为这是一个有用的答案,那么你应该点赞它。你可以给多个有用的答案点赞,但只能接受一个答案,也就是最好地回答了你的问题的那个答案。 - Andreas
我是一个新用户,所以你可能实际上看不到变化,因为我自己没有足够的声望来获得可见的赞同票。但它已经完成了。 - Alexander Porter

-2

这样可以吗?
你可以获取Java的安装路径。

String path = System.getProperty("java.home");

-2

当您执行myExes\java\java.exe AJavaProgram时,AJavaProgramjava.exe的参数而不是反过来。同样的,当您执行java AJavaProgram时,AJavaProgramjava的参数。


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