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");