Java編譯後資源路徑

本次獲取路徑,通過Class(字節碼文件類對象獲取)

以普通Java項目爲例,JavaEE有特定API獲取路徑就不多說了

  首先要搞懂項目編譯輸出後的路徑與源代碼路徑的問題。一般來說源代碼中編寫資源文件路徑,
都要按照項目文件編譯輸出路徑爲準(輸出路徑,一般爲頂層package爲準),因爲.java文件都會被編譯.class文
件,以及一些資源文件一同拷貝。
(源代碼文件與資源文件以及它們的各層級路徑,都會輸出到你指定的輸出目錄。)輸出到指定的目錄。
該目錄是我們設置的,如下圖輸出所示(idea中設置)
  同時爲了方便管理資源文件,通常新建一個資源文件夾,與源代碼文件夾分離。但是編譯輸出時仍按照當前目錄層
  級結構一共複製到指定輸出目錄,所以源代碼文件中編寫資源文件路徑時,應該以輸出目錄爲準。

圖1

  1. 通過類加載器對象獲取路徑
public class Test {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
//        H2ConnectionDemo.test();
        //獲取項目編譯輸出後的根路徑
        System.out.println(ClassLoader.getSystemResource("").getPath());
        System.out.println(Test.class.getResource("/").getPath());
        
        /*
        * 結果
        * /F:/code_space/idea_space/keepwd/target/classes/
        * /F:/code_space/idea_space/keepwd/target/classes/
        * */

        //獲取當前類所在的包路徑
        System.out.println(Test.class.getResource("").getPath());
        System.out.println(Test.class.getResource(".").getPath());
        /*結果
        * /F:/code_space/idea_space/keepwd/target/classes/com/nubi/
        * /F:/code_space/idea_space/keepwd/target/classes/com/nubi/
        * */

        //獲取當前類的包路徑的上以及路徑
        System.out.println(Test.class.getResource("..").getPath());
        /*結果
        * /F:/code_space/idea_space/keepwd/target/classes/com/
        * */
    }
}

獲取頂層路徑千萬注意:
千萬不要寫成:
System.out.println(getClass().getResource(File.separator));得不到正確的路徑,得到的結果是
file:/F:/code_space/idea_space/keepwd/target/classes/sample/%5c
應該這樣寫
System.out.println(Test.class.getResource("/").getPath());

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章