英文:
Can I get the path of the currently running java executable?
问题
假设我想从命令行运行一个Java程序,并使用以下命令:
myExes\java\java.exe AJavaProgram
如您所见,java.exe不在我的路径中,因此我是手动运行它,而不是简单地使用命令java AJavaProgram。
我希望程序返回/打印命令中的第一个条目,在本例中,该条目是myExes\java(在这之后包括java.exe也可以)。
有没有办法做到这一点?
最初,我认为这很简单。args[0]应该返回路径,但事实并非如此。
英文:
Suppose I want to run a java program from the command line and I use this command:
myExes\java\java.exe AJavaProgram
As you can see, java.exe is not in my path, so I am running it manually rather than simply using the command java AJavaProgram.
I would like the program to return/print the first entry in the command, in this case, that entry is myExes\java. (Including java.exe at the end of this is also fine).
Is there a way to do this?
Initially, I thought it would be simple. args[0] would return the path, but that is not the case.
答案1
得分: 8
ProcessHandle.current() 返回当前的 Java 进程。您可以使用它来查看进程句柄信息中的完整命令:
ProcessHandle.current().info().command().ifPresent(
cmd -> System.out.println(cmd));
英文:
ProcessHandle.current() returns the current Java process. You can use that to see the full command in the process handle’s info:
ProcessHandle.current().info().command().ifPresent(
cmd -> System.out.println(cmd));
答案2
得分: 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
英文:
You can't get the string "myExes\java\java.exe", but you can get the location of the Java installation.
The following are results for running with OpenJDK 14 on Windows 10:
System.out.println(System.getProperty("java.home"));
System.out.println(System.getProperty("sun.boot.library.path"));
Output
C:\prog\Java64\jdk-14
C:\prog\Java64\jdk-14\bin
For reference, the full path of java.exe is:
C:\prog\Java64\jdk-14\bin\java.exe
答案3
得分: -2
这种方式怎么样?
您可以获取Java的主目录。
String path = System.getProperty("java.home");
英文:
How about this way?
You can get a java home dir.
String path = System.getProperty("java.home");
答案4
得分: -2
当您执行myExes\java\java.exe AJavaProgram时,AJavaProgram是传递给java.exe的参数,而不是反过来。当您执行java AJavaProgram时也是一样的,AJavaProgram是传递给java的参数。
英文:
When you do myExes\java\java.exe AJavaProgram AJavaProgram is the arg to java.exe and not the reverse. Its the same when you do java AJavaProgram, AJavaProgram is the arg to java.
专注分享java语言的经验与见解,让所有开发者获益!

评论