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 單向同步