1. 程式人生 > >java project 和 javaWeb的讀取檔案路徑問題(整理自百度經驗,有空驗證下)

java project 和 javaWeb的讀取檔案路徑問題(整理自百度經驗,有空驗證下)

總結:

1. 從工程根目錄開始的路徑直接讀取

File f = new File(“1.txt”),或者寫成這樣:File f = new File(“./1.txt”);

./,表示工程根目錄,可以省略!

這裡不要使用File f = new File(“../1.txt”);

2. 通過位元組碼物件讀取(避免)

Hello.java:String f = Hello.class.getResource(“/4.txt”).getPath();

這種以“/”開頭的是以絕對路徑方式讀取,意思是bin目錄下開始讀取4.txt

如果寫成這樣:String f = Hello.class.getResource

(“4.txt”).getPath();

這種不以“/”開頭的是以相對路徑方式讀取,意思是從當前類所在的目錄下開始讀取4.txt

3. 通過classloader讀的話,它只會從classpath下開始讀取(不是class位置),並且java project不能以“/”開頭,javaWeb以不以“/”開頭路徑相同。

3.1、當前類名.class.getResource()的返回值型別是URL;同時還有一個方法:當前類名.class.getResourceAsStream(),它的返回值型別是InputStream,是一個位元組讀取流。在開發中可以根據需要選擇相應的方法。

3.2、要讀取檔案,檔案首先必須真實存在

,要不然返回的URL就等於Null

4. 專案最終要部署在web伺服器中,檔案只能使用絕對路徑來讀取

getServletConfig().getServletContext().getRealPath(“/WEB-INF/2.txt”);這種方式只是獲取檔案的路徑字串,並不會檢查是否真的存在這樣一個檔案。“/WEB-INF/2.txt”換成“WEB-INF/2.txt”,路徑是一樣的。

通過ServletContext物件可以獲取web工程根目錄及其子目錄(包括WEB-INFclasses)所有檔案的絕對路徑。

4.1如果檔案位於classpath(也就是classes目錄),我們還可以通過另兩種方式來讀取。

1、通過位元組碼物件來讀

這種方式與上邊Java Project中通過位元組碼物件讀取類路徑下檔案的方式相同,可參照上邊的2

2、通過類載入器來讀

這種方式與上邊Java Project中通過classloader讀取類路徑下檔案的方式基本相同,可參照上邊的3

唯一不同的是: Java Project中通過classloader讀的話,它只會從classpath下開始讀取,並且不能以“/”開頭。而在JavaWeb Project,可以是相對路徑,也可以是絕對路徑,也就說你加不加“/”開頭效果是一樣的。

===Java ProjectJavaWeb Project通過classloader讀的話,都不要加“/”開頭就不會有問題了。