Fork me on GitHub

Java函数getResourceAsStream参数路径写法解析(路径书写不正常会出现空指针错误机异常)

首先,Java中的getResourceAsStream有以下几种: 
1. Class.getResourceAsStream(String path) : path 不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。

2. Class.getClassLoader.getResourceAsStream(String path) :默认则是从ClassPath根下获取,path不能以’/'开头,最终是由ClassLoader获取资源。

3. ServletContext. getResourceAsStream(String path):默认从WebAPP根目录下取资源,Tomcat下path是否以’/'开头无所谓,当然这和具体的容器实现有关。

4. Jsp下的application内置对象就是上面的ServletContext的一种实现。

一、getResourceAsStream用法示例如下:

InputStream is = Generator.class.getResourceAsStream("generator/generatorConfig.xml");

执行后发现is=null,进而报出了空指针错误异常。

 

 首先来了解以下路径写法:

1. 路径开头有“/”时,代表此路径是绝对路径,用于实现类与该.xml不在一个包下的情况,如下所示:

 

 这里的generatorConfig.xml和Generator.java并不在一个包下,所以这时正确写法应该是:

InputStream is = Generator.class.getResourceAsStream("/generator/generatorConfig.xml");

同时要将pom.xml文件中相对路径的设置注释掉才可以:

<!--<resources>
            <resource>
                <directory>src/main/resources/com/example/simple</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>

            </resource>
        </resources>-->

这时运行结果如下:

 

 虽然还有报红,但是路径问题已经被解决。

2. 路径开头没有"/"时,代表此时是相对路径,用于实现类与该.xml在一个包下的情况,如下所示:

 

  这里的generatorConfig.xml和Generator.java在一个包下,所以这时正确写法应该是:

InputStream is = Generator.class.getResourceAsStream("generator/generatorConfig.xml");
posted @ 2020-12-16 10:46  叶语婷  阅读(1642)  评论(0编辑  收藏  举报