zbb20170604 java file 路徑 this.getClass().getResource(String) 路徑問題
阿新 • • 發佈:2018-09-15
默認 文件同步 ron 編譯運行 str 當前 斜杠 區別 java、
this.getClass().getResource(String) 路徑問題 這裏的默認當前路徑是該類所在目錄; this.getClass() 說明了一切!!
this.getClass().getClassLoader().getResource(String) 這裏的路徑就是項目的根目錄 src/main下的 或者編譯好的classes 下的;getClassLoader()說明了一切 ! !
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 單向同步
zbb20170604 java file 路徑 this.getClass().getResource(String) 路徑問題