如何获取Java程序的名称?

时间:2011-02-03 19:26:08

标签: java

我正在创建一个可能是.exe.jar的应用程序,我需要知道它是什么。有谁知道我怎么能得到用Java运行的程序的文件名/扩展名?我可以得到程序运行的路径,但我无法得到名称。

3 个答案:

答案 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