我想从放置jar文件的目录中获取文本文件。
假设我的桌面应用程序'foo.jar'文件放在Windows的安装中的d:\中。 当'foo.jar'应用程序运行时,我想在同一目录中找到一个test.txt文件。 如何在我的'foo.jar'应用程序中获取该特定路径? 简而言之,我想获取放置它的'foo.jar'文件的路径。
答案 0 :(得分:3)
请注意,实际代码确实取决于程序包中的实际类位置,但通常看起来像:
URL root = package.Main.class.getProtectionDomain().getCodeSource().getLocation();
String path = (new File(root.toURI())).getParentFile().getPath();
...
// handle file.txt in path
答案 1 :(得分:1)
使用URLClassLoader加载大多数JAR,URLClassLoader会记住加载JAR的codesource。您可以使用此知识来获取JVM加载JAR的目录的位置。您还可以使用ProtectionDomain类来获取CodeSource(如另一个答案所示;不可否认,这可能更好)。
返回的位置通常是file:
协议类型,因此您必须删除此协议标识符才能获取实际位置。以下是执行此活动的简短代码段;如果您需要在生产中使用它,您可能希望构建更多错误检查和边缘案例检测:
public String getCodeSourceLocation() {
ClassLoader contextClassLoader = CurrentJARContext.class.getClassLoader();
if(contextClassLoader instanceof URLClassLoader)
{
URLClassLoader classLoader = (URLClassLoader)contextClassLoader;
URL[] urls = classLoader.getURLs();
String externalForm = urls[0].toExternalForm();
externalForm = externalForm.replaceAll("file:\\/", "");
externalForm = externalForm.replaceAll("\\/", "\\" + File.separator);
return externalForm;
}
return null;
}
答案 2 :(得分:0)
我找到了自己问题的最简答案 String path = System.getProperty(“user.dir”);