日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java开发中文件读取方式总结

發布時間:2025/1/21 java 109 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java开发中文件读取方式总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JAVA開發中,免不了要讀文件操作,讀取文件,首先就需要獲取文件的路徑。路徑分為絕對路徑和相對路徑。

在文件系統中,絕對路徑都是以盤符開始的,例如C:abc1.txt。

什么是相對路徑呢?相對路徑就是相對與其他文件的路徑。比如說有這么一個文件,它的絕對路徑是C:abcdef2.txt,那么它相對與?C:abc1.txt的路徑就是def2.txt(也可以寫成這種形式:.def2.txt)。”.”的意思是當前目錄,也就是它所相對的文件所在的目錄,在這里就是:C:abc。

在Java開發中,我們通常會創建兩種工程:Java?Project和JavaWeb?Project。

一、在Java?Project中,我們用的是相對路徑。比如我們這里有一個Java工程:test,在test下邊會自動創建兩個目錄:src和bin。

1、這時候我們如果在test下新建一個文件:1.txt?,那么我們在代碼當中就可以這樣讀取它:File?f?=?new?File(“1.txt”),或者寫成這樣:File?f?=?new?File(“./1.txt”);

2、如果test下新建目錄abc?,在abc?下新建文件2.txt,代碼讀取就是這樣:File?f?=?new?File(“abc/2.txt”),或者寫成這樣:File?f?=?new?File(“./abc/2.txt”);

3、如果在src下新建文件3.txt,代碼讀取就是這樣:File?f?=?new?File(“src/3.txt”),或者寫成這樣:File?f?=?new?File(“./src/3.txt”);由于src下的所有文件最終會被編譯到bin目錄下,所以直接讀取src下的文件沒有多大意義。

4、如果在src下有一個文件4.txt,我們知道它最終被編譯到bin目錄下,那么怎么去讀取這個編譯后的文件呢?有3種方式來讀取。

4.1、直接讀取

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

由于bin目錄(包括web應用中WEB-INF下的classes目錄)統稱為classpath(類路徑),對于類路徑下的文件,我們還可以采用下邊兩種方式來讀取。

4.2、通過字節碼對象讀取

假如當前類為:Hello.java,它所在的包是:com.mac.util

在Hello.java中:String?f?=?Hello.class.getResource(“/4.txt”).getPath();這種以“/”開頭的是以絕對路徑方式讀取,意思是從bin目錄下開始讀取4.txt,/=D:eclipseworkspacetestbin。

如果寫成這樣:String?f?=?Hello.class.getResource(“4.txt”).getPath();這種不以“/”開頭的是以相對路徑方式讀取,意思是從當前類所在的目錄下開始讀取4.txt,顯然是讀不到的,改成這樣就可以了:String?f?=?Hello.class.getResource(“../../../4.txt”).getPath();“..”代表當前目錄的上一級目錄,由于當前類所在的包是三層,所以這里使用了三次“..”。

同理:如果4.txt位于com.mac.util包下,與Hello.class處于同一目錄。用絕對路徑讀就是這樣:String?f?=?Hello.class.getResource(“/com/mac/util/4.txt”).getPath();用相對路徑讀就是這樣:String?f?=?Hello.class.getResource(“4.txt”).getPath();注意:相對路徑這種讀取方式僅限于在?和被讀取文件位于同一包下的類中可以這么讀,其他包中的類是不能這樣讀取的。

綜上所述:采用相對路徑讀取文件還要考慮當前類所在的位置,非常麻煩,所以對于classpath下的文件,我們統一采用絕對路徑方式來讀取。

4.3、通過類加載器讀取

String?f?=?當前類名.class.getClassLoader().getResource(“4.txt”).getPath();

注意:通過類加載器讀取只能使用相對路徑,如果使用絕對路徑就讀取不到了,比如改成這樣:String?f?=?當前類名.class.getClassLoader().getResource(“/4.txt”).getPath();就不行。

如果把4.txt放到com.mac.util包下,讀取代碼:String?f?=?當前類名.class.getClassLoader().getResource(“com/mac/util/4.txt”).getPath();

可以看出,通過classloader讀的話,它只會從classpath下開始讀取,并且不能以“/”開頭。

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

2、要讀取文件,文件首先必須真實存在,要不然返回的URL就等于Null。

二、在JavaWeb?Project中,使用相對路徑是讀不到文件的,因為JavaWeb?Project與Java?Project不同,項目最終要部署在web服務器中,文件只能使用絕對路徑來讀取。

比如我使用的IDE是eclipse,建立一個web?project:day01,在WebContent(工程根目錄)下有一個文件1.txt,那么就可以通過ServletContext對象來讀取了。

比如在servlet中,可以這樣:getServletConfig().getServletContext().getRealPath(“/1.txt”);這種方式只是獲取文件的路徑字符串,并不會檢查是否真的存在這樣一個文件。

比如我把1.txt刪除,執行上邊代碼仍然可以打出路徑:...../apache-tomcat-7.0.42/webapps/day01?/1.txt。并且這里的路徑可以是絕對路徑也可以是相對路徑,取得的效果是一樣的。比如寫成這樣也是可以的:getServletConfig().getServletContext().getRealPath(“1.txt”);

如果在WEB-INF下有一個文件2.txt,讀取:getServletConfig().getServletContext().getRealPath(“/WEB-INF/2.txt”);也就是說通過ServletContext對象可以獲取web工程根目錄及其子目錄(包括WEB-INF、classes等)所有文件的絕對路徑。

當然,如果文件位于classpath(也就是classes目錄)下,我們還可以通過另兩種方式來讀取。

1、通過字節碼對象來讀

這種方式與上邊Java?Project中通過字節碼對象讀取類路徑下文件的方式相同,可參照上邊的4.2。

2、通過類加載器來讀

這種方式與上邊Java?Project中通過classloader讀取類路徑下文件的方式基本相同,可參照上邊的4.3。?唯一不同的是:上邊的路徑只能是相對路徑,也就是說不能以“/”開頭。而在JavaWeb?Project中,可以是相對路徑,也可以是絕對路徑,也就說你加不加“/”開頭效果是一樣的。

?

轉載于:https://blog.51cto.com/yuke198907/1340760

總結

以上是生活随笔為你收集整理的Java开发中文件读取方式总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。