JAVA 获取jar包的同级路径
在Java开发中,我们经常会使用到jar包,jar包是一种可以将多个Java类文件打包成一个文件的格式,方便我们在项目中引用和使用。有时候,我们需要获取当前运行的jar包的路径,这在一些需要读取配置文件或者其他资源时非常有用。本文将介绍如何使用Java代码获取jar包的同级路径,并提供相应的示例代码。
1. 使用Java的ProtectionDomain
类
在Java中,ProtectionDomain
类提供了获取当前运行环境的保护域的功能,通过获取该类的实例,我们可以获取到当前运行的jar包所在的路径。
import java.security.CodeSource;
import java.security.ProtectionDomain;
public class JarPathUtil {
public static String getJarPath() {
ProtectionDomain protectionDomain = JarPathUtil.class.getProtectionDomain();
CodeSource codeSource = protectionDomain.getCodeSource();
return codeSource.getLocation().getPath();
}
public static void main(String[] args) {
String jarPath = getJarPath();
System.out.println("当前运行的jar包路径:" + jarPath);
}
}
运行上述代码,输出结果为当前运行的jar包路径。
2. 使用Java的Class
类
除了使用ProtectionDomain
类,我们还可以使用Class
类提供的方法来获取当前运行的jar包路径。通过获取当前类的资源路径,并处理获取到的路径字符串,我们可以得到jar包所在的路径。
public class JarPathUtil {
public static String getJarPath(Class<?> clazz) {
String className = clazz.getName().replace(".", "/") + ".class";
String classPath = clazz.getClassLoader().getResource(className).toString();
if (classPath.startsWith("jar:file:")) {
int endIndex = classPath.lastIndexOf("!");
if (endIndex != -1) {
classPath = classPath.substring(0, endIndex);
if (classPath.startsWith("jar:file:")) {
classPath = classPath.substring("jar:file:".length());
} else {
classPath = classPath.substring("file:".length());
}
}
} else {
classPath = classPath.substring("file:".length());
classPath = classPath.substring(0, classPath.length() - className.length());
}
return classPath;
}
public static void main(String[] args) {
String jarPath = getJarPath(JarPathUtil.class);
System.out.println("当前运行的jar包路径:" + jarPath);
}
}
运行上述代码,输出结果为当前运行的jar包路径。
3. 获取同级目录路径
如果我们需要获取jar包所在的同级目录路径,而不是整个jar包的路径,可以通过获取jar包路径后进行简单的处理即可。
import java.io.File;
public class JarPathUtil {
public static String getJarParentPath(Class<?> clazz) {
String jarPath = getJarPath(clazz);
File jarFile = new File(jarPath);
String parentPath = jarFile.getParent();
return parentPath;
}
public static void main(String[] args) {
String jarParentPath = getJarParentPath(JarPathUtil.class);
System.out.println("当前运行的jar包所在的同级目录路径:" + jarParentPath);
}
}
运行上述代码,输出结果为当前运行的jar包所在的同级目录路径。
小结
通过上述方法,我们可以方便地获取当前运行的jar包的路径或同级目录路径。在实际开发中,我们可以利用这些路径来读取配置文件、加载资源等操作。