类加载时获取类绝对路径(静态代码块获取类绝对路径)

    发生的情况: 线上项目CFCA签章需要一个类似安全证书文件路径,在本地只需要获取弄个静态变量path="D:/*******"就可以,但是线上就需要从项目路径下找到这个安全证书的位置.用下面的方法会报空指针异常

        private static String path = null;
static{
path = GetStaticPath.class.getClass().getResource("").getPath();
}


 
 

    下面的方法也是异常

        private static String path = null;
static{
path = Thread.currentThread().getContextClassLoader().getResource("/").getPath();
}

    下面的方法不会异常

        private static String path = null;
static{
path = GetStaticPath.class.getResource("").getPath();
}

    输出:/D:/007workspace/learning/bin/learning/



    个人觉得原因是:.class取类的字节码文件,getClass从类的实例对象取类的字节码文件,类加载时还没有初始化完毕,所以这时候取到得对象为空,Thread.currentThread()取到得对象也为空.

    但是上面的方法.class虽然能取到文件的路径,在线上项目就不行了,所以内部类就管用了,参考(https://my.oschina.net/u/572362/blog/865067)

所以新的方法是

        public static String  JKS_PATH = null;
static {
String path = new Object() {
        public String getPath() {
            return this.getClass().getResource("/").getPath();
        }
}.getPath().substring(1);  
        path=path.replace("classes", "vm"); //去掉class\  
        path+="/anxinsign.jks";
        JKS_PATH = path;
}

OJBK,没有问题!!!

猜你喜欢

转载自blog.csdn.net/qq_33300026/article/details/80818860