Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取当前正在运行的jar的路径和名称?_Java_Jar - Fatal编程技术网

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

Java 如何获取当前正在运行的jar的路径和名称?,java,jar,Java,Jar,有很多文件夹可以让您找到运行jar所在的文件夹,但是如何获取运行jar呢?例如,如果foo.jar位于C:/foo/foo.jar中,那么如何获取路径C:/foo/foo.jar,而不是C:/foo。另外,我也不知道A:如果jar被移到了另一个文件夹,B:如果我的jar被重命名,C:如果我的jar在同一个文件夹中有其他jar。我想获得当前运行的jar的一个文件对象,然后我将以某种方式使用它来用我的程序的新版本替换该jar。有人能帮我吗?谢谢 编辑: 请稍等,找到目录后,是否可以扫描目录以查找ja

有很多文件夹可以让您找到运行jar所在的文件夹,但是如何获取运行jar呢?例如,如果foo.jar位于C:/foo/foo.jar中,那么如何获取路径C:/foo/foo.jar,而不是C:/foo。另外,我也不知道A:如果jar被移到了另一个文件夹,B:如果我的jar被重命名,C:如果我的jar在同一个文件夹中有其他jar。我想获得当前运行的jar的一个文件对象,然后我将以某种方式使用它来用我的程序的新版本替换该jar。有人能帮我吗?谢谢 编辑:
请稍等,找到目录后,是否可以扫描目录以查找jar文件,并在每个jar文件中检查我的jar中的某个类/其他文件?

您可以使用find file JAVA API

您需要的是File.listFilesFileNameFilter

这将为您提供目录中与特定筛选器匹配的文件列表

代码将类似于


要获取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);

好吧,我知道了。是这样的:

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。

不,我发现的每个其他stackoverflow问题都想得到jar所在的目录,我想要jar本身。这里有一个误解。运行的java程序由java类组成。这些类可以来自类路径的不同源,包括多个JAR文件。不是一个,而是多个。没有一个jar文件可供查找,您所能做的就是查找类路径并扫描其中的jar。如何获取类路径?您的意思是,在类路径中,将有到加载的任何和所有JAR的路径?System.getPropertyjava.class.path;刚刚编辑。现在您已经有了jar的路径和主类名。