如何获取当前正在运行的 jar 的路径和名称



有很多文件夹可以让您找到正在运行的jar所在的文件夹,但是如何获取正在运行的jar?例如,如果 foo.jar 在 C:/FOO/foo.jar 中,那么我将如何获得路径 C:/FOO/foo.jar,而不是 C:/FOO。另外,我不知道 A:如果 jar 被移动到不同的文件夹,B:如果我的 jar 被重命名,以及 C:如果与我的 jar 在同一文件夹中还有其他 jar。我想获取当前正在运行的 jar 的 File 对象,然后我将使用它(以某种方式)用我的程序的新版本替换该 jar。谁能帮我解决这个问题?谢谢!编辑:等一下,是否可以在找到目录后扫描它以查找 jar 文件,并在每个 jar 文件中检查我的 jar 中的某个类/其他文件?

好吧,我想通了。它是这样的:

File dir = new File(YourMainClass.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
String jar = System.getProperty("java.class.path");
File jarFile = new File(dir, jar);

谢谢大家!编辑:另外,如果我最终在类路径中有多个jar,我需要一些东西来检查我是否得到了正确的jar。

为了获取jar的路径,请使用:

File dir = new File(YourMainClass.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());

若要获取主类名,请使用:

StackTraceElement[] stack = Thread.currentThread().getStackTrace();
StackTraceElement main = stack[stack.length - 1];
String mainClass = main.getClassName();

然后,将它们一起使用:

File f = new File(dir, mainClass);

您可以使用查找文件 JAVA API。

你想要的是File.listFiles(FileNameFilter filter)。

这将为您提供所需目录中与某个过滤器匹配的文件列表。

代码将类似于

最新更新