从 java 代码中以编程方式查找绝对的 java.exe路径

2022-09-01 20:33:22

如果我有一个由用户启动的java jar或类文件(假设java路径是在环境变量中设置的),那么我如何从代码中找出java的绝对路径.exe / javaw.exe从中启动此文件。

就像在ubuntu上一样,我们可以运行:它显示了路径。% which java

但是,在Windows上,如果我检查,可能会发现有多个路径,例如旧版本或新版本。如果通过cmd线,我运行它不显示路径。System.getenv()java -version

你能告诉我,通过纯java或Windows上的命令行,如何找到javaw.exe的位置吗?


答案 1
String javaHome = System.getProperty("java.home");

你能告诉我通过纯Java吗?在Windows上,如何找出javaw的位置.exe?

例如

import java.io.File;

class JavawLocation {

    public static void main(String[] args) {
        String javaHome = System.getProperty("java.home");
        File f = new File(javaHome);
        f = new File(f, "bin");
        f = new File(f, "javaw.exe");
        System.out.println(f + "    exists: " + f.exists());
    }
}

输出

C:\Program Files (x86)\Java\jdk1.6.0_29\jre\bin\javaw.exe    exists: true
Press any key to continue . . .

是的,我相信这将在JRE中起作用。


答案 2

在 Windows 上,java.library.path System Property 以 bin 目录的路径开头,该目录包含用于运行 jar 文件的任何 java.exe。

这是有道理的,因为在Windows上,任何可执行文件查找DLL文件的第一个地方是包含可执行文件本身的目录。因此,很自然地,当JVM运行时,它查找 DLL 的第一个地方是包含 java.exe的目录。

您可以获取 java 的路径.exe如下所示:

final String javaLibraryPath = System.getProperty("java.library.path");
final File javaExeFile = new File(
  javaLibraryPath.substring(0, javaLibraryPath.indexOf(';')) + "\\java.exe"
);
final String javaExePath =
  javaExeFile.exists() ? javaExeFile.getAbsolutePath() : "java";

此代码是特定于 Windows 的 - 我对路径分隔符进行了硬编码(;)和文件分隔符 ()。我还将回退设置为“java”,以防库路径技巧以某种方式不起作用。

我已经在Windows 7上的Java 6和7中对此进行了测试。我尝试了32位和64位版本的Java。


推荐