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

dar*_*ckc 27 java jar

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

Rob*_*boy 68

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

getClass().getProtectionDomain().getCodeSource().getLocation()
Run Code Online (Sandbox Code Playgroud)

  • 不完美?这实际上是最可靠的,因为其他建议的建议返回**当前工作目录**,这本身不是JAR所在的文件夹.例如,如果您执行`cd/somefolder`然后执行`java -jar/otherfolder/file.jar`,则其他建议将返回`/ somefolder`.+1. (18认同)
  • 并不总是可以确定封闭JAR的位置(类加载器可以使用任何东西进行存储,而不仅仅是文件系统),但是当它存在时,*this*就是这样做的方法. (3认同)

Boz*_*zho 14

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

new File(".").getAbsolutePath()
Run Code Online (Sandbox Code Playgroud)

  • 正如@Will Hartung所说,"当前目录可能与执行jar所在的位置无关." (22认同)

小智 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;
}
Run Code Online (Sandbox Code Playgroud)