我正在各个位置运行一个jar文件,我正在试图弄清楚如何获取正在运行的jar文件的位置。
答案 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。