如何在运行时获取Java App的ExePath / MainClassPath / MainJarPath?

时间:2013-03-24 11:52:33

标签: java path main

为使用C#,C ++,VB等编写的Windows应用程序定义了“运行EXE的路径”。

- Windows上的Java应用程序不是“EXE-Applications”,而是启动类文件或jar文件而不是EXE文件。 因此,对于Java应用程序,术语“ExePath”应该转换为“MainClassPath”或“JarPath”。

- 在某些情况下,程序员需要知道应用程序jar或MainClass的物理路径。 (例如,当您使用相同的类和相同的方法在java和c#中开发大型项目时)

- 感谢其他stackoverflow用户,这句话完成了这项工作:

String exePath = URLDecoder.decode(this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath(), "UTF-8")

现在问我的问题:

如果我将相同的代码放入任何helper / utils jar-library中,那么它将返回helperlib.jar的路径,它不会返回我的MainClass / AppJar的路径!

-

所以最终的getExePath()辅助方法应该类似于:

return(URLDecoder.decode(Thread.currentThread().getStartingThread().getMainClass().getProtectionDomain().getCodeSource().getLocation().getPath(), "UTF-8"));

(如果在java中只有像getStartingThread()getMainClass()这样的方法...)

-

请指出最终的解决方案,我该如何实施这些步骤:

  • 获取起始线程
  • 获取起始线程的主类
  • 获取主类的路径

1 个答案:

答案 0 :(得分:0)

如果我说得对,只需将带有所需类参数的方法放入helperlib-class ......

e.g:

public static String getExePath(Object main) {

        String path = "";

        try {
            path = URLDecoder.decode(main.getClass().getProtectionDomain().getCodeSource().getLocation().getPath(), "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        return path;
}

然后你可以打电话给它,例如从你的主罐里面带参数'this'...

System.out.println("AppPath:\n" + helperlib.getExePath(this));

...并且您获得了参数

中指定的类的路径

希望对我糟糕的英语有所帮助和抱歉......;)