this.getClass().getResource(String) 路徑問題

this.getClass().getResource(String) 路徑問題    這裏的默認當前路徑是該類所在目錄; this.getClass() 說明了一切!!java

                                                                           找到類,就找文件;很顯然和類同一目錄下web

                                                                           若是是在靜態方法裏,能夠使用     類名.Class.getResource()app

this.getClass().getClassLoader().getResource(String)  這裏的路徑就是項目的根目錄 src/main下的 或者編譯好的classes 下的;getClassLoader()說明了一切 ! !webapp

                                                                           找到類,還得找到類的加載器,再找文件;很顯然再根目錄下maven

File f=new File(String);//路徑問題和上述有點區別   這裏默認當前路徑是該工程下的第一層 與平時所說的src 在同一層工具

其實具體所指示的路徑可能因爲開發工具的相關配置而引發不一樣,此時能夠打印一下f的路徑看看開發工具

  其實很簡單:       測試

/images/j.jpg    
/a.txt

有斜槓 表示從 項目 根目錄下找

   

images/j.jpg
a.txt 

無斜槓表示從當前 執行 文件夾下尋找

難點在於哪裏是根目錄,哪裏是當前文件夾下。。。。。。是編譯好的文件噢!!!!! 不必定 是當前編寫的代碼所在的文件。爲何說不必定呢?

對於maven項目,根目錄實際上是在target 文件夾下的classes 或 test-classes

對於maven的web項目其目錄結構應以下
maven
--src
--main
--java (在運行時,其內容會被編譯到target的classes下,緊適合放java代碼)
--包A
--包B
--resources (在運行時,下面內容會被拷貝的target下,所以放一些資源文件)
--文件夾C
--圖片X
--圖片J
--webapp
--test



--target (運行或編譯時候自動生成)
--classes
--包A
--包B
--問價夾C
--圖片X
--圖片J
           --test-classes

如上圖:根目錄就是指classes/ 或test-classes/

test與main下面的文件夾結構相似,都通常包含java、resource等

假如我在main/resources 下面的文件價夾下放置 圖片.jpg;經過test/java/中的類可否使用呢?

答案是能夠的:

本人測試結果以下:

首次編譯執行test:

main/resources與 test/resources 內都有要使用的文件,則使用拷貝到test-classes/下的文件
                     main/resources有 test/resources 內沒有,則使用拷貝到classes/下的文件           非初次編譯運行時:                       假如我在第二次運行前刪除了test-classes/下的文件 則他會去尋找classes/下的文件                     若都刪除則會報錯,找不到   文件同步機制:src ----> target  單向同步
相關文章
相關標籤/搜索