java讀取檔案的方法:1、透過使用【java.io】方法讀取,相對於目前使用者目錄的相對路徑讀取;2、透過使用【java.lang.ClassLoader】方法讀取,相對於classpath的相對路徑讀取。
java中讀取檔案的方法:
#java讀取檔案的兩種方法:java.io和java.lang.ClassLoader
// java.io: File file = new File("..."); FileInputStream fis = new FileInputStream("..."); FileReader fr = new FileReader("..."); //ClassLoader: ClassLoader loader = XXXClass.class.getClassLoader(); ClassLoader loader2 = Thread.currentThread().getContextClassLoader(); URL url = loader.getResource("..."); File file = new File(url.getFile()); InputStream input = loader.getResourceAsStream("...");
1、java.io 套件中的類別總是根據目前使用者目錄來分析相對路徑名,也就是說相對路徑是否好使,取決於user.dir 的值。系統屬性 user.dir 是 JVM 啟動的時候設定的,通常是 Java 虛擬機器的呼叫目錄,也就是執行 java 指令所在的目錄。
對於tomcat/jboss 容器,user.dir 是 %home/bin%/ 目錄,因為這個目錄就是我們啟動web 容器的地方
在eclipse 中執行程式的時候,eclipse 會將user.dir 的值設為工程的根目錄
用戶目錄可以使用 System.getProperty("user.dir") 來查看
所以說,使用java.io 讀取文件,無論是相對路徑,或是絕對路徑都不是好的做法,能不使用就不要使用(在JavaEE 中)。
2、使用ClassLoader
Class.getResource() 有 2 種方式,絕對路徑和相對路徑。絕對路徑以 / 開頭,從 classpath 或 jar 包根目錄下開始搜尋;
#相對路徑是相對目前 class 所在的目錄,允許使用 .. 或 . 來定位檔案。
ClassLoader.getResource() 只能使用絕對路徑,而且不用以 / 開頭。
這兩種方式讀取資源文件,不會依賴user.dir,也不會依賴特定部署的環境,是建議的做法(JavaEE)
##如何選取
java.io:相對於目前使用者目錄的相對路徑讀取;專注於與磁碟檔案打交道或純java project 中使用。 雖然 ClassLoader 方式比較通用,但如果不是 javaEE 環境,要定位到 classpath 路徑下去讀取檔案是不合理的。 java.lang.ClassLoader:相對於 classpath 的相對路徑讀取;建議在 javaEE 環境中都使用這種方式。 通常,ClassLoader 無法讀取太大的文件,它適合讀取web 專案的那些設定文件,如果需要讀取大文件,還是要用IO 包下的,可以先透過ClassLoader 取得文件的絕對路徑,然後傳給File 或其他對象,用io 包裡的對象去讀取會更好些。 更多java知識請關注java基礎教學。
以上是java中如何讀取文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!