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

    发生的情况: 线上项目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,没有问题!!!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值