Java 当从不同目录启动应用程序(.jar文件)时,如何获取位于类路径中的绝对文件路径?

Java 当从不同目录启动应用程序(.jar文件)时,如何获取位于类路径中的绝对文件路径?,java,path,processbuilder,Java,Path,Processbuilder,假设Java应用程序文件夹包含以下文件: app.jar lib/file.exe 在app.jar中,我像这样调用.exe: String[] exeCmd = new String[]{"lib/file.exe"}; ProcessBuilder pb = new ProcessBuilder(exeCmd); ... YourClass.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 如果我

假设Java应用程序文件夹包含以下文件:

app.jar
lib/file.exe
在app.jar中,我像这样调用.exe:

String[] exeCmd = new String[]{"lib/file.exe"};
ProcessBuilder pb = new ProcessBuilder(exeCmd);
...
YourClass.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 
如果我从同一个目录启动.jar文件,一切正常。但如果应用程序是从不同的目录启动的-
lib/file.exe
找不到,并且
ProcessBuilder
退出,错误为“没有这样的文件或目录”

我的问题是-如何获得正确的
lib/file.exe
路径,并将其提供给
ProcessBuilder
,尽管应用程序是从其他目录启动的

编辑:


现在我在想(不同的观点)那些类似.exe的文件我应该放在用户目录中,比如Windows操作系统中的“应用程序数据”,然后再使用它们?通过调用
System.getenv(“APPDATA”)可以很容易地找到路径
System.getProperty(“user.home”)。但另一方面,如果有很多PC用户,那么这些.exe文件将为每个用户复制(浪费磁盘空间)。

您可以这样做:

String[] exeCmd = new String[]{"lib/file.exe"};
ProcessBuilder pb = new ProcessBuilder(exeCmd);
...
YourClass.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 

你看起来像这样吗?相关,但不是答案。