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包的路径或同级目录路径。在实际开发中,我们可以利用这些路径来读取配置文件、加载资源等操作。