независимый от платформы способ получить текущий путь к исполняемому файлу Java и имя файла

Мне нужно выполнить приложение Java, используя ProcessBuilder. Мне также нужно использовать тот же исполняемый файл Java в вызываемом процессе, который используется вызывающим приложением.

Есть ли независимый от платформы способ получить текущий путь к исполняемому файлу Java и имя файла?

Я видел некоторые фрагменты кода, подобные этому:

public static boolean isWindows() {
    return (System.getProperty("os.name").toLowerCase().indexOf("win") >= 0);
}

public static String getJavaExecutablePath() {

    String executable = "java";
    if (isWindows()) {
       executable = executable + ".exe";
    }
    File path = new File(System.getProperty("java.home"), "/bin/" + executable);
    return path.getAbsolutePath();
}

Приведенный выше код, вероятно, потребуется улучшить, чтобы использовать File.separator.

Это все, что требуется, или есть что-то еще, например, чувствительность к регистру?

В идеале должна быть библиотека для получения пути ОС, но это, вероятно, вопрос для другого форума.


person Chris Snow    schedule 03.05.2014    source источник


Ответы (1)


Во-первых, самое важное для вашего требования — это System.getProperty("java.home"), оно у вас уже есть.

Во-вторых, не беспокойтесь о чувствительности к регистру, путь «$JAVA_HOME/bin/java» всегда должен быть в нижнем регистре в каждом выпуске java, и от этого уже зависит много других проектов.

И последнее, вам не нужно использовать '/' или '\' для построения абсолютного пути, учтите это:

File path = new File(new File(System.getProperty("java.home"), "bin"), executable);

Как вы упомянули, File.separator делает то же самое, но это говорит о строке, а File говорит о файле.

Вот обсуждение пути к файлу

person Doug Hou    schedule 03.05.2014