我可以获取当前 运行 java 可执行文件的路径吗?
Can I get the path of the currently running java executable?
假设我想从命令行 运行 一个 java 程序并且我使用这个命令:
myExes\java\java.exe AJavaProgram
如您所见,java.exe 不在我的路径中,所以我 运行 手动设置它而不是简单地使用命令 java AJavaProgram
.
我希望程序 return/print 命令中的第一个条目,在本例中,该条目是 myExes\java
。 (在末尾加上 java.exe 也可以)。
有办法吗?
起初,我认为这很简单。 args[0] 会 return 路径,但事实并非如此。
这样怎么样?
您可以获得 java 主目录。
String path = System.getProperty("java.home");
您无法获取字符串 "myExes\java\java.exe"
,但您可以获取 Java 安装的位置。
以下是 运行 OpenJDK 14 在 Windows 10 上的结果:
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
当您执行 myExes\java\java.exe AJavaProgram
时,AJavaProgram
是 java.exe
的参数,而不是相反。当你做 java AJavaProgram
时也是一样的,AJavaProgram
是 java
的参数。
ProcessHandle.current() returns 当前 Java 进程。您可以使用它来查看进程句柄信息中的完整命令:
ProcessHandle.current().info().command().ifPresent(
cmd -> System.out.println(cmd));
假设我想从命令行 运行 一个 java 程序并且我使用这个命令:
myExes\java\java.exe AJavaProgram
如您所见,java.exe 不在我的路径中,所以我 运行 手动设置它而不是简单地使用命令 java AJavaProgram
.
我希望程序 return/print 命令中的第一个条目,在本例中,该条目是 myExes\java
。 (在末尾加上 java.exe 也可以)。
有办法吗?
起初,我认为这很简单。 args[0] 会 return 路径,但事实并非如此。
这样怎么样?
您可以获得 java 主目录。
String path = System.getProperty("java.home");
您无法获取字符串 "myExes\java\java.exe"
,但您可以获取 Java 安装的位置。
以下是 运行 OpenJDK 14 在 Windows 10 上的结果:
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
当您执行 myExes\java\java.exe AJavaProgram
时,AJavaProgram
是 java.exe
的参数,而不是相反。当你做 java AJavaProgram
时也是一样的,AJavaProgram
是 java
的参数。
ProcessHandle.current() returns 当前 Java 进程。您可以使用它来查看进程句柄信息中的完整命令:
ProcessHandle.current().info().command().ifPresent(
cmd -> System.out.println(cmd));