我正在创建一个应用程序,可以是 .exe
或 .jar
,我需要知道它是哪种类型。有人知道如何在Java中获取正在运行的程序的文件名/扩展名吗?我可以获取程序运行的路径,但无法获取名称。
我正在创建一个应用程序,可以是 .exe
或 .jar
,我需要知道它是哪种类型。有人知道如何在Java中获取正在运行的程序的文件名/扩展名吗?我可以获取程序运行的路径,但无法获取名称。
java -Dprogram.name=myApp.jar -jar myApp.jar
在您的代码中这样读取
if ("myApp.jar".equals(System.getProperty("program.name"))) {
// perform appropriate actions...
}
java.exe
。我建议您从完全不同的角度解决问题,并设置一个系统属性,供程序查询。或者您可以让它和JAR清单指定不同的主类。下面这段代码应该可以解决问题:
try {
Class cls = Class.forName(getClass().getCanonicalName());
ClassLoader cLoader = cls.getClassLoader();
String nomeDaClasse=cls.getCanonicalName().replace(".", "/").concat(".class");
System.out.println("nomeDaClasse = "+ nomeDaClasse);
String urlClasseJava = cLoader.getSystemResource(nomeDaClasse).toString();
_nomeArquivoJava=urlClasseJava.substring("jar:file:".length(), urlClasseJava.indexOf("!/"));
System.out.println("_nomeArquivoJava = "+ _nomeArquivoJava);
}
catch(Exception e) {
e.printStackTrace();
}
输出结果将类似于此:
$ java -jar CasaInformatizada-0.1.4.jar
dez 03, 2020 5:27:49 PM br.com.cvra.monitorArduino.Principal subirEscrivao
INFORMAÇÕES: /var/tmp/monitorArduino.xml
nomeDaClasse = br/com/cvra/monitorArduino/Principal.class
_nomeArquivoJava = /var/tmp/CasaInformatizada-0.1.4.jar
这是基于以下来源:
https://www.infoworld.com/article/2077485/java-tip-120--execute-self-extracting-jars.html https://www.tutorialspoint.com/java/lang/classloader_getsystemresource.htm