如果可执行文件保存在属于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
个位置启动的那样?
答案 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));
}
}
}