class.getResource与class.getClassLoader().getResource使用

来源:互联网 发布:淘宝质量好的男装店 编辑:程序博客网 时间:2024/06/02 20:23

项目结构(gradle构建):

|--src    |--main        |--java        |    |--com        |    |    |--kingboy        |    |        |--resource        |    |            |--ResourceContentUtil.java        |    |            |--class.txt        |    |--root.txt                    |--resource             |--resources.txt

1.类.class.getClassLoader().getResource(path)是相对于项目根目录而言的,且只能传入相对路径

例:获取resouces.txt,则path=**resources.txt**例:获取root.txt,则path=**root.txt**例:获取class.txt,则path=**com/kingboy/resource/class.txt**

2.类.class.getResource(path)可以传入绝对路径与相对路径。

相对路径:相对于当前类的路径例:获取resouces.txt,则path=**../../../resources.txt**例:获取root.txt,则path=**../../../root.txt**例:获取class.txt,则path=**com/kingboy/resource/class.txt**绝对路径:相对于项目根路径例:获取resouces.txt,则path=**/resources.txt**例:获取root.txt,则path=**/root.txt**例:获取class.txt,则path=**/com/kingboy/resource/class.txt**

3.扩展:其实类.class.getResource()是通过调用类.class.getClassLoader().getResource来实现的。具体实现方式如下(伪代码):

    //1.当class.getResource传入绝对路径时,会将路径前的"/"去掉,然后传给classLoader.getResource()    //2.当传入相对路径时,会将路径补全,然后传给classLoader.getResource()    class.getResource()    例:    class.getResource(String path) {        if (!path.startsWith("/")) {            //相对路径              path = basePath + path;        } else {            //绝对路径            path = path.subString(1);        }        classLoader().getResource(path);    }

具体源码请参考:github项目中的io.resource模块

阅读全文
0 0