我正在创建一个可能是.exe
或.jar
的应用程序,我需要知道它是什么。有谁知道我怎么能得到用Java运行的程序的文件名/扩展名?我可以得到程序运行的路径,但我无法得到名称。
答案 0 :(得分:5)
使''程序名称'成为通过'-D'命令行开关传递给程序的属性,如此
java -Dprogram.name=myApp.jar -jar myApp.jar
在您的代码中阅读,如此
if ("myApp.jar".equals(System.getProperty("program.name"))) {
// perform appropriate actions...
}
答案 1 :(得分:4)
运行JAR文件的实际程序为java.exe
。
我建议你从一个完全不同的角度解决问题,并让exe包装器设置程序查询的系统属性。或者你可以拥有它,JAR清单指定不同的主类。
答案 2 :(得分:0)
下面的代码片段应该可以解决问题:
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