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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM