从不同目录启动应用程序(.jar 文件)时,如何获取位于 class 路径中的绝对文件路径?
How to get absolute file path located in class path when starting application (.jar file) from different directory?
假设 Java 应用程序文件夹有这些文件:
app.jar
lib/file.exe
在 app.jar 中,我这样调用 .exe:
String[] exeCmd = new String[]{"lib/file.exe"};
ProcessBuilder pb = new ProcessBuilder(exeCmd);
...
如果我从同一目录启动 .jar 文件 - 一切正常。但是,如果应用程序是从不同的目录启动的 - lib/file.exe
无法找到并且 ProcessBuilder
退出并出现错误 "no such file or directory"。
我的问题是 - 如何获得正确的 lib/file.exe
路径,并将其提供给 ProcessBuilder
尽管应用程序是从其他目录启动的?
编辑:
现在我在想(不同的方法)那些 .exe 之类的文件我应该放在用户目录中,比如 Windows OS 中的 "Application Data" 并稍后使用它们?在 Unix 中调用 System.getenv("APPDATA");
或 System.getProperty("user.home");
很容易找到路径。但另一方面 - 如果有很多 PC 用户 - 那么这些 .exe 文件将为每个用户复制(磁盘浪费 space)。
你可以这样做:
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);
...
如果我从同一目录启动 .jar 文件 - 一切正常。但是,如果应用程序是从不同的目录启动的 - lib/file.exe
无法找到并且 ProcessBuilder
退出并出现错误 "no such file or directory"。
我的问题是 - 如何获得正确的 lib/file.exe
路径,并将其提供给 ProcessBuilder
尽管应用程序是从其他目录启动的?
编辑:
现在我在想(不同的方法)那些 .exe 之类的文件我应该放在用户目录中,比如 Windows OS 中的 "Application Data" 并稍后使用它们?在 Unix 中调用 System.getenv("APPDATA");
或 System.getProperty("user.home");
很容易找到路径。但另一方面 - 如果有很多 PC 用户 - 那么这些 .exe 文件将为每个用户复制(磁盘浪费 space)。
你可以这样做:
YourClass.class.getProtectionDomain().getCodeSource().getLocation().getPath();