如果从Windows环境变量PATH启动,如何在Java中获取可执行文件的完整路径?

时间:2015-09-28 16:07:00

标签: java windows

如果可执行文件保存在属于Windows环境变量PATH的位置,我想获取用Java启动的可执行文件的路径。

比如说,我们使用下面的代码片段在Windows中启动NOTEPAD。此处notepad.exe保存在Windows文件夹下,该文件夹是Windows环境变量PATH的一部分。因此,无需在此处提供可执行文件的完整路径。

Runtime runtime = Runtime.getRuntime();         
Process process = runtime.exec("notepad.exe");

所以我的问题是,如何获取Java程序中可执行文件/文件的绝对位置(在这种情况下如果notepad.exe保留在c:\windows下,在java程序中我需要获取路径{ {1}}),如果它们是从c:\windows个位置启动的那样?

3 个答案:

答案 0 :(得分:6)

他们没有这样做的内置功能。但是你可以像shell在PATH找到可执行文件一样找到它。

拆分PATH变量的值,遍历条目,这些条目应该是目录,第一个包含notepad.exe的条目是使用的可执行文件。

public static String findExecutableOnPath(String name) {
    for (String dirname : System.getEnv("PATH").split(File.pathSeparator)) {
        File file = new File(dirname, name);
        if (file.isFile() && file.canExecute()) {
            return file.getAbsolutePath();
        }
    }
    throw new AssertionError("should have found the executable");
}

我现在没有编译器和我一起验证,但我认为上面的内容会有效。

答案 1 :(得分:4)

您可以通过以下方式获取Windows中可执行文件的位置:

where <executable_name>

例如:

where mspaint返回:

  

C:\ Windows \ System32下\ mspaint.exe

以下代码:

Process process = Runtime.getRuntime().exec("where notepad.exe");
try (BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
    File exePath = new File(in.readLine());
    System.out.println(exePath.getParent());
}

将输出:

  

C:\ Windows \ System32下

答案 2 :(得分:0)

public static void main(String[] args) {
    Module m = new Module();
    m.printOnDemand();

    Scanner sods = new Scanner(System.in);
    Path p = Paths.get("Z:\\DIS\\Project\\Data.txt");
    Path p1 = Paths.get("Data.txt");
    int count = p.getNameCount();

    System.out.println("file is :" + p.toString());
    System.out.println("file name P:" + p.getFileName());
    System.out.println("Names :" + p1.getFileSystem());
    System.out.println("There are :" + count + " elements in the path");


    for(int i = 0; i < count; i++)
    {
        System.out.println("Element :" + i + " is " + p.getName(i));

    }
} 

}