假设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
退出并且出现错误“没有这样的文件或目录”。
我的问题是 - 尽管应用程序是从其他目录启动的,但如何获得正确的lib/file.exe
路径并将其提供给ProcessBuilder
?
修改
现在我想(不同的方法)那些.exe文件我应该放在用户目录中,比如Windows操作系统中的“应用程序数据”,以后再使用它们?通过在Unix中调用System.getenv("APPDATA");
或System.getProperty("user.home");
可以很容易地找到路径。但另一方面 - 如果有很多PC用户 - 那么每个用户都会复制那些.exe文件(浪费磁盘空间)。
答案 0 :(得分:2)
你可以这样做:
YourClass.class.getProtectionDomain().getCodeSource().getLocation().getPath();