1. 程式人生 > >zbb20170604 java file 路徑 this.getClass().getResource(String) 路徑問題

zbb20170604 java file 路徑 this.getClass().getResource(String) 路徑問題

默認 文件同步 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) 路徑問題