獲取JAVA(WEB)專案路徑的方法
最近的專案涉及了檔案上傳的功能,不可避免的需要獲得檔案路徑的方法。
下面是關於獲取檔案路徑的一些方法。
對於獲取檔案路徑,在Jsp,Servlet,Java中,有不同的方法。
在java類中:
- 獲取當前的classpath的絕對URI路徑
this.getClass().getClassLoader().getResource(“/”).getPath()
this.getClass().getClassLoader().getResource(“”).getPath() - 獲取當前類的載入目錄,如果有“/”,獲取當前類的所在工程路徑
this.getClass().getResource(“”).getPath()
this.getClass().getResource(“/”).getPath() - 專案的絕對路徑
this.getClass().getClassLoader().getResource(“.”).getPath(); - 另一種獲取當前的classpath的絕對uri路徑的方法
Thread.currentThread().getContextClassLoader().getResource(“/”).getPath()
Thread.currentThread().getContextClassLoader().getResource(“”).getPath() - 專案的絕對路徑
Thread.currentThread().getContextClassLoader().getResource(“.”).getPath() - 獲取專案的路徑
directory.getCanonicalPath() - 獲取檔案的路徑
ActionForm.getMyFile() - 獲取系統的路徑
System.getProperty(“”)
注意:如果一個類是通過bootstrap 載入的,那我們通過這個類去獲得classloader的話,有些jdk的實現是會返回一個null的。
比如說我用new Object().getClass().getClassLoader()的話,會返回一個null,這樣的話上面的程式碼就會出現NullPointer異常.所以保險起見我們最好還是使用我們自己寫的類來獲取classloader(”this.getClass().getClassLoader()“),這樣一來就不會有問題。
在jsp中:
- 獲取包含工程名的當前頁面全路徑
request.getRequestURI() - 獲取站點的虛擬路徑
request.getContextPath() - 獲取當前頁面所在目錄下全名稱
request.getServletPath() - 獲取頁面所在伺服器的全路徑
application.getRealPath(“頁面.jsp”) - 得到頁面所在伺服器的絕對路徑
java.io.File(application.getRealPath(request.getRequestURI())).getParent();
在servlet中:
- 得到工程目錄(引數具體到包名)
request.getSession().getServletContext().getRealPath(“”) - 得到IE位址列地址
request.getRequestURL() - 得到相對地址
request.getRequestURI() - 獲取站點的絕對路徑
request.getServletContext().getRealPath(“/”)
request.getRealPath(“/”)
注意:在Web應用程式中,我們一般通過ServletContext.getRealPath(”/”)方法得到Web應用程式的根目錄的絕對路徑。還有request.getContextPath(); 在Weblogic中要用request.getServletContext().getContextPath();但如果打包成war部署到Weblogic伺服器,專案內部並沒有檔案結構的概念,用這種方式是始終得到null,獲取不到路徑,目前還沒有找到具體的解決方案。
相關問題
絕對路徑和相對路徑
絕對路徑:主頁上的檔案或目錄在硬碟上真正的路徑,URL和物理路徑。
相對路徑:相對與某個基 準目錄的路徑。包含Web的相對路徑(HTML中的相對目錄)。 伺服器端的地址伺服器端的相對地址指的是相對於web應用的地址,這個地址是在伺服器端解析的(不同於html和javascript中的相對 地址,他們是由客戶端瀏覽器解析的)。
注意:一般在程式設計中,一般都操作讀取檔案的相對路徑,因為絕對路徑雖然是比較好處理的,但是不靈活,所以我們在程式設計中對檔案進行操作的時候,一般都是讀取檔案的相對路徑,
類載入器
一般類載入器有系統的和使用者自己定義的;系統的ClassLoader就是jdk提供的,他的路徑就是jdk下的路徑,或者在 jsp程式設計,比如Tomcat ,取得的類載入器的位置就是tomcat自己設計的載入器的路徑,