Java 如何讀取resources


Sample in Github

1.一般使用Maven創建Java工程,代碼文件在src/main/java文件夾中,資源文件在src/main/resources文件夾中,Java代碼為什么可以讀取到src/main/resources下的資源文件呢?

=> Maven會將Java工程編譯到target文件夾下,/target/classes應該就是其根目錄。編譯后發現,.class文件就在這個文件夾下的對應子文件夾中,而src/main/resources下的文件被復制到了這個文件夾下。

 

2. src/test/java目錄下的測試代碼,又是如何讀取resources的呢?

=> Maven會將src/test/java文件夾下的代碼編譯到target/test-classes文件夾下。同樣的,如果src/test/resources下有資源文件的話,就復制到target/test-classes文件夾下。

測試代碼運行時,優先使用test-classes文件夾下的資源文件,如果不存在,再使用classes文件夾下的資源文件。

 

  public void loadProperties1() throws IOException {
    InputStream input = null;
    // read from the root folder
    input = this.getClass().getResourceAsStream("/config.properties");
    
    // InputStream java.lang.Class.getResourceAsStream(String name)
    // 1.首先,根據資源名稱構造出一個絕對的資源路徑
    //   如果資源名稱以'/'開頭,資源的絕對名稱就是'/'之后的名稱部分
    //   否則,就是modified_package_name/name
    //   modified_package_name就是這個類的包名,其中的'.'換為'/'
    // 2.然后,查找資源的規則是由類的class loader實現的。
    //   如果這個類是由bootstrap類加載器加載的話,就會用ClassLoader.getSystemResourceAsStream.

    printProperties(input);
  }
  
  public void loadProperties2() throws IOException {
    InputStream input = null;
    
    input = this.getClass().getClassLoader().getResourceAsStream("config2.properties");
    // URL java.lang.ClassLoader.getResource(String name)
    // 資源名就是由'/'分割的資源的路徑名
    // 首先查找父類加載器
    // 如果父是null,就查找內置到VM中的該類加載器的路徑
    // 失敗的話,調用 findResource(String)
    
    printProperties(input);
  }

  


免責聲明!

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



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