springboot讀取配置文件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 用法大致有以下幾種: 

第一: 要加載的文件和.class文件在同一目錄下,例如:com.x.y 下有類me.class ,同時有資源文件myfile.xml 

那么,應該有如下代碼: 

me.class.getResourceAsStream("myfile.xml"); 

第二:在me.class目錄的子目錄下,例如:com.x.y 下有類me.class ,同時在 com.x.y.file 目錄下有資源文件myfile.xml 

那么,應該有如下代碼: 

me.class.getResourceAsStream("file/myfile.xml"); 

第三:不在me.class目錄下,也不在子目錄下,例如:com.x.y 下有類me.class ,同時在 com.x.file 目錄下有資源文件myfile.xml 

那么,應該有如下代碼: 

me.class.getResourceAsStream("/com/x/file/myfile.xml"); 

總結一下,可能只是兩種寫法 

第一:前面有 “   / ” 

“ / ”代表了工程的根目錄,例如工程名叫做myproject,“ / ”代表了myproject 

me.class.getResourceAsStream("/com/x/file/myfile.xml"); 

第二:前面沒有 “   / ” 

代表當前類的目錄 

me.class.getResourceAsStream("myfile.xml"); 

me.class.getResourceAsStream("file/myfile.xml"); 

最后,自己的理解: 
getResourceAsStream讀取的文件路徑只局限與工程的源文件夾中,包括在工程src根目錄下,以及類包里面任何位置,但是如果配置文件路徑是在除了源文件夾之外的其他文件夾中時,該方法是用不了的。

 


 

在springboot項目中,一般會將一些配置文件放在resources文件夾下,如下圖

當java項目打成jar包,則無法以文件的形式直接獲取resources中的文件,此時以流的形式獲取,故此需要用getResourceAsStream這個方法

 

 

測試代碼入下:

public class Test {

    private static Properties properties = new Properties();
    static {
        InputStream resourceAsStream = 
                Test.class.getResourceAsStream("/common/testFile.properties");
        try {
            properties.load(resourceAsStream);
        }catch (IOException ioe){
            ioe.printStackTrace();
        }finally{

        }
    }
    public static void main(String[] args) {
        Test test = new Test();
        System.out.println(test.properties.get("hdfs.user.root"));
    }
}

 

如果有結果說明讀取沒有問題!

轉載:https://www.cnblogs.com/macwhirr/p/8116583.html

相關:https://www.cnblogs.com/erlou96/p/12974853.html


免責聲明!

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



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