如何获取当前执行的 jar 文件所在的目录? [复制]
Posted
技术标签:
【中文标题】如何获取当前执行的 jar 文件所在的目录? [复制]【英文标题】:How do I get the directory that the currently executing jar file is in? [duplicate] 【发布时间】:2011-02-19 16:54:09 【问题描述】:我在不同的位置运行一个 jar 文件,我试图弄清楚如何获取正在运行的 jar 文件的位置。
【问题讨论】:
最好的选择是:String path = new File(".").getCanonicalPath().toString();
【参考方案1】:
不是一个完美的解决方案,但这将返回类代码库的位置:
getClass().getProtectionDomain().getCodeSource().getLocation()
【讨论】:
不完美?这实际上是最可靠的,因为其他提议的建议返回 当前工作目录,它本身并不是 JAR 所在的文件夹。例如。如果您先执行cd /somefolder
,然后执行java -jar /otherfolder/file.jar
,则其他建议将返回/somefolder
。 +1。
所以这个解决方案实际上会返回/otherfolder
?
并不总是可以确定封闭 JAR 的位置(类加载器可以使用任何东西进行存储,而不仅仅是文件系统),但是当它是时,this 是这样做的方法。
+1 我的 IDE 玩得太久了
对我来说它返回包括 program.jar 名称【参考方案2】:
正如 cmets 中所述,这不是问题的直接答案,但实际上可能是许多人正在寻找的(执行代码的当前目录):
new File(".").getAbsolutePath()
【讨论】:
正如@Will Hartung 所说,“当前目录很可能与执行jar 所在的位置无关。” 还有比这更小的代码。new File("").getAbsolutePath();
【参考方案3】:
这是我从任何地方获取执行路径的方法
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;
【讨论】:
你可以使用 URLDecoder.decode(directoryPath, "UTF-8");用空格替换 %20 你也可以使用 absolutePath.lastIndexOf(File.separator) 来支持所有操作系统【参考方案4】:考虑以下函数
//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];
【讨论】:
【参考方案5】:这似乎是一个不确定的问题。
如果我在 Java 中运行代码,它会用完 rt.jar 并且可能还有十几个其他 jar。
最先运行的文件实际上是在 rt.jar 中,rt.jar 它调用你的 main.jar。
如果您编写的类允许您告诉您正在运行的 jar 并且该类被移动到不同的 jar 中,那么您将不再“用尽”包含您的 main 的 jar。
我认为您想要的是启动应用程序的命令行,但如果您先 CD 到该目录,那么它可能没有您的 jar 的完整路径。
此外,您可能不是从 jar 中运行的——有人可能已将您的 jar 扩展为目录中的类并以这种方式运行。
就我个人而言,我只是将您的程序包装在一个 shell 脚本启动器中,您可以在其中查看您当前的位置和 jar 文件的位置,然后将它们传递给 java。
【讨论】:
好点,我们的应用程序被包装在一个巨大的罐子里(不幸的是)。以上是关于如何获取当前执行的 jar 文件所在的目录? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
linux shell脚本如何获取“当前工作路径”,“执行脚本所在路径”,“执行脚本所在路径和执行路径的相对路径”?(当前目录脚本目录脚本路径)
linux shell脚本如何获取“当前工作路径”,“执行脚本所在路径”,“执行脚本所在路径和执行路径的相对路径”?(当前目录)