你所不知道的getResource()在maven下的黑洞!

原创不易,转载请标明地址,或者直接附上我的博客首页https://georgedage.blog.csdn.net/ ,当然最好私信一下,谢谢。

getResource接受一个字符串参数,如果以”/”开头,就在classpath根目录下找(不会递归查找子目录),如果不以”/”开头,就在调用getResource的字节码对象所在目录下找(同样不会递归查找子目录)。

光说不练,不行滴。上代码:

非maven结构

image
image.gif

package com.jd.search;

public class Test {
    public static void main(String[] args) {
        System.out.println(Test.class.getResource(""));
        System.out.println(Test.class.getResource("/"));
        System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

        System.out.println(Test.class.getResource("george.class"));
        System.out.println(Test.class.getResource("/george.class"));
        System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");

        System.out.println(Test.class.getResource("dictionary.txt"));
        System.out.println(Test.class.getResource("/dictionary.txt"));
        System.out.println("**********************************");

        System.out.println(Test.class.getResourceAsStream("/"));
        System.out.println(Test.class.getResourceAsStream("/dictionary.txt"));
    }
}

image.gif

结果展示:

image
image.gif

【友情提醒】

这里做出建议,如果你不太好记住这个规则,就在进行加载路径时,进行一次输出,或者提前进行一个类似的小demo测试。免得¥,你懂得!!!

当然,本篇博客重点不是说这个,这个大家都懂,说的是,getResource()在maven下的黑洞!

期初用maven建了这个项目,就是去手写一个分词器。

然后呢?发现怎么搞都是空指针,空指针一个常见,也比较好解决的问题,然后我就进行了测试,最终发现了这个问题,写出来,以防各位,日后掉坑。


Maven结构

image
image.gif

代码:

package com.jd.search;

public class Test {
    public static void main(String[] args) {
        System.out.println(Test.class.getResource(""));
        System.out.println(Test.class.getResource("/"));
        System.out.println(Test.class.getResource("george.class"));
        System.out.println(Test.class.getResource("/george.class"));
        System.out.println(Test.class.getResource("dictionary.txt"));
        System.out.println(Test.class.getResource("/dictionary.txt"));

        System.out.println(Test.class.getResourceAsStream("/"));
        System.out.println(Test.class.getResourceAsStream("/dictionary.txt"));
    }
}

image.gif

结果展示:

image
image.gif

有心的可以将两次记过进行对比,或者自己敲一下demo。

这里为了方便大家。请看:上面的是非maven结构,下面的是maven结构:

image
image.gif


为什么会出现这样的问题?

我将其归结为maven项目的运行机制导致的。这一点相信你仔细观察路径后也能发现。

还不是很了解的,或者有比较好的了解的,欢迎留言!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容