如何获取当前正在执行的jar文件所在的目录?

时间:2010-05-14 20:07:37

标签: java jar

我正在各个位置运行一个jar文件,我正在试图弄清楚如何获取正在运行的jar文件的位置。

5 个答案:

答案 0 :(得分:67)

不是一个完美的解决方案,但这将返回类代码库的位置:

getClass().getProtectionDomain().getCodeSource().getLocation()

答案 1 :(得分:13)

如评论中所述,这不是问题的直接答案,但可能实际上是许多人正在寻找的(执行代码的当前目录):

new File(".").getAbsolutePath()

答案 2 :(得分:7)

这是我从任何地方获取执行路径的方法

private static String GetExecutionPath(){
    String absolutePath = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
    absolutePath = absolutePath.substring(0, absolutePath.lastIndexOf("/"));
    absolutePath = absolutePath.replaceAll("%20"," "); // Surely need to do this here
    return absolutePath;
}

答案 3 :(得分:2)

考虑以下功能

 //This method will work on Windows and Linux as well.    
     public String getPath(){
        URL rootPath = getClass().getResource("");
        String URI=rootPath.toString().substring(9);
        String[] currentPath=URI.split("myjar.jar!");
        currentPath[0]=currentPath[0].replaceAll("%20"," ");
        return currentPath[0];
        }

答案 4 :(得分:0)

这似乎是一个开始时的问题。

如果我在Java中运行代码,它将耗尽rt.jar以及可能的十几个其他jar。

要运行的第一个文件实际上是在rt.jar中,rt.jar它会调用你的主文件。

如果你编写一个允许你告诉你正在运行的jar并且该类被移动到另一个jar中的类,那么你就不会“耗尽”包含你的main的jar了。

我认为你想要的是启动你的应用程序的命令行,但是如果你首先CD到目录,那么它可能没有你的jar的完整路径。

此外,您可能无法从jar运行 - 有人可能已将您的jar扩展到目录中的类并以此方式运行。

就个人而言,我只是将你的程序包装在一个shell脚本启动器中,在那里你可以查看当前位置和jar文件的位置,然后将它们传递给java。