java取得路徑各種方法總結

來源:互聯網
上載者:User

 

1、 java檔案中獲得路徑
Thread.currentThread().getContextClassLoader().getResource("") //獲得資源檔(.class檔案)所在路徑


ClassLoader.getSystemResource("")
Class_Name.class.getClassLoader().getResource("")
Class_Name.class .getResource("/")         
Class_Name.class .getResource("")         // 獲得當前類所在路徑
System.getProperty("user.dir")              // 獲得項目根目錄的絕對路徑
System.getProperty("java.class.path")    //得到類路徑和包路徑


列印輸出依次如下:
file:/F:/work_litao/uri_test/WebContent/WEB-INF/classes/
file:/F:/work_litao/uri_test/WebContent/WEB-INF/classes/
file:/F:/work_litao/uri_test/WebContent/WEB-INF/classes/
file:/F:/work_litao/uri_test/WebContent/WEB-INF/classes/
file:/F:/work_litao/uri_test/WebContent/WEB-INF/classes/com/xml/imp/
F:work_litaouri_test
F:work_litaouri_testWebContentWEB-INFclasses;F:work_litaouri_testWebContentWEB-INFlibdom4j.jar


2、 JSP中獲得當前應用的相對路徑和絕對路徑
根目錄所對應的絕對路徑:request.getRequestURI()
檔案的絕對路徑  :application.getRealPath(request.getRequestURI());
當前web應用的絕對路徑 :application.getRealPath("/");
取得請求檔案的上層目錄:new File(application.getRealPath(request.getRequestURI())).getParent()
3.1 JSP中獲得當前應用的相對路徑和絕對路徑
根目錄所對應的絕對路徑:request.getRequestURI()
檔案的絕對路徑  :application.getRealPath(request.getRequestURI());
當前web應用的絕對路徑 :application.getRealPath("/");
取得請求檔案的上層目錄:new File(application.getRealPath(request.getRequestURI())).getParent()

 


3、Servlet中獲得當前應用的相對路徑和絕對路徑
根目錄所對應的絕對路徑:request.getServletPath();
檔案的絕對路徑 :request.getSession().getServletContext().getRealPath(request.getRequestURI())
當前web應用的絕對路徑 :servletConfig.getServletContext().getRealPath("/");
(ServletContext對象獲得幾種方式:
javax.servlet.http.HttpSession.getServletContext()
javax.servlet.jsp.PageContext.getServletContext()
javax.servlet.ServletConfig.getServletContext()
)

ClassLoader.getSystemResource()

從用來載入類的搜尋路徑中尋找具有指定名稱的資源。此方法通過系統類別載入器來尋找資源。用於讀取資源的 URL 對象,返回 URL 類型,如果找不到資源,則返回 null。

參數以"/"開頭是相對於包的路徑,否則表示相對於類的路徑。

 

ClassLoader.getResource()

尋找具有給定名稱的資源。資源是可以通過類代碼以與代碼基無關的方式訪問的一些資料(映像、聲音、文本等)。資源名稱是以"/"分隔的標識資源的路徑名稱。

此方法首先搜尋資源的父類載入器;如果父類載入器為 null,則搜尋的路徑就是虛擬機器的內建類載入器的路徑。如果搜尋失敗,則此方法將調用 findResource(String) 來尋找資源。用於讀取資源的 URL 對象,返回 URL 類型,如果找不到該資源,或者調用者沒有足夠的許可權擷取該資源,則返回 null。

 

File.getAbsolutePath()

返回此抽象路徑名的絕對路徑名字串。

如果此抽象路徑名已經是絕對路徑名,則返回該路徑名字串,這與 getPath() 方法一樣。如果此抽象路徑名是空抽象路徑名,則返回目前使用者目錄的路徑名字串,該目錄由系統屬性 user.dir 指定。否則,使用與系統有關的方式解析此路徑名。在 UNIX 系統上,根據目前使用者目錄解析相對路徑名,可使該路徑名成為絕對路徑名。在 Windows 系統上,根據路徑名指定的當前磁碟機目錄(如果有)解析相對路徑名,可使該路徑名成為絕對路徑名;否則,可以根據目前使用者目錄解析它。 返回絕對路徑名字串,它與此抽象路徑名表示相同的檔案或目錄。

 

System.getProperty("user.dir")

取得使用者當前工程路徑,因為所有在java.io中的類都是將相對路徑名解釋為起始於使用者的當前工作目錄,所以應該清楚當前的目錄。

 

Class.getResource()

尋找帶有給定名稱的資源。尋找與給定類相關的資源的規則是通過定義類的 class loader 實現的。返回一個 URL 對象;如果找不到帶有該名稱的資源,則返回 null。此方法委託給此對象的類載入器。如果此對象通過引導類載入器載入,則此方法將委託給 ClassLoader.getSystemResource(java.lang.String)。

在委託前,使用下面的演算法從給定的資源名構造一個絕對資源名:

    如果 name 以 "/" ("/u002f") 開始,則絕對資源名是"/" 後面的 name 的一部分。
    否則,絕對名具有以下形式:modified_package_name/name,其中 modified_package_name 是此對象的包名,該名用 "/" 取代了 "." ("/u002e")。

 
Class.getResourceAsStream()

API中說明與getResource相同,都是委託給ClassLoader.getSystemResource(name);的。

 

資源檔路徑結構

"[01]" + ClassLoader.getSystemResource("")
"[02]" + Thread.currentThread().getContextClassLoader().getResource("")
"[03]" + this.getClass().getClassLoader().getResource("")
"[04]" + this.getClass().getResource("Path.class")
"[05]" + new File("/").getAbsolutePath()
"[06]" + new File("").getAbsolutePath()
"[07]" + System.getProperty("user.dir")
"[08]" + this.getClass().getResource("/test.xml")
"[09]" + this.getClass().getResource("/test.xml").toString()
"[10]" + this.getClass().getResource("/test.xml").getFile()
"[11]" + new File(this.getClass().getResource("/test.xml").toString()).getAbsolutePath()
"[12]" + new File(this.getClass().getResource("/test.xml").getFile()).getAbsolutePath()
"[13]" + new InputStreamReader(this.getClass().getResourceAsStream("/test.xml"))
"[14]" + this.getClass().getResource("test.xml").toString()
"[15]" + this.getClass().getResource("test.xml").getFile()
"[16]" + new File(this.getClass().getResource("test.xml").toString()).getAbsolutePath()
"[17]" + new File(this.getClass().getResource("test.xml").getFile()).getAbsolutePath()
"[18]" + new InputStreamReader(this.getClass().getResourceAsStream("test.xml"))

 

windows下執行class檔案的結果(編譯檔案在E:/workspace/sunyzc/bin/)

[01]file:/E:/workspace/sunyzc/bin/
[02]file:/E:/workspace/sunyzc/bin/
[03]file:/E:/workspace/sunyzc/bin/
[04]file:/E:/workspace/sunyzc/bin/com/sunyzc/test/Path.class
[05]E:/
[06]E:/workspace/sunyzc/bin
[07]E:/workspace/sunyzc/bin
[08]file:/E:/workspace/sunyzc/bin/test.xml
[09]file:/E:/workspace/sunyzc/bin/test.xml
[10]/E:/workspace/sunyzc/bin/test.xml
[11]E:/workspace/sunyzc/bin/file:/E:/workspace/sunyzc/bin/test.xml
[12]E:/workspace/sunyzc/bin/test.xml
[13]java.io.InputStreamReader@c17164
[14]file:/E:/workspace/sunyzc/bin/com/sunyzc/test/test.xml
[15]/E:/workspace/sunyzc/bin/com/sunyzc/test/test.xml
[16]E:/workspace/sunyzc/bin/file:/E:/workspace/sunyzc/bin/com/sunyzc/test/test.xml
[17]E:/workspace/sunyzc/bin/com/sunyzc/test/test.xml
[18]java.io.InputStreamReader@1fb8ee3

windows下執行class

windows下執行class

 

windows下執行jar包的結果(jar包檔案在E:/workspace/sunyzc/)

[01]null
[02]null
[03]null
[04]jar:file:/E:/workspace/sunyzc/sunyzc.jar!/com/sunyzc/test/Path.class
[05]E:/
[06]E:/workspace/sunyzc
[07]E:/workspace/sunyzc
[08]jar:file:/E:/workspace/sunyzc/sunyzc.jar!/test.xml
[09]jar:file:/E:/workspace/sunyzc/sunyzc.jar!/test.xml
[10]file:/E:/workspace/sunyzc/sunyzc.jar!/test.xml
[11]E:/workspace/sunyzc/jar:file:/E:/workspace/sunyzc/sunyzc.jar!/test.xml
[12]E:/workspace/sunyzc/file:/E:/workspace/sunyzc/sunyzc.jar!/test.xml
[13]java.io.InputStreamReader@1fb8ee3
[14]jar:file:/E:/workspace/sunyzc/sunyzc.jar!/com/sunyzc/test/test.xml
[15]file:/E:/workspace/sunyzc/sunyzc.jar!/com/sunyzc/test/test.xml
[16]E:/workspace/sunyzc/jar:file:/E:/workspace/sunyzc/sunyzc.jar!/com/sunyzc/test/test.xml
[17]E:/workspace/sunyzc/file:/E:/workspace/sunyzc/sunyzc.jar!/com/sunyzc/test/test.xml
[18]java.io.InputStreamReader@61de33

windows下執行jar檔案

windows下執行jar檔案

 

linux下執行jar包的結果(jar包檔案在/usr/workspace/sunyzc/)

iCAS:~# cd /usr/workspace/sunyzc
iCAS:/usr/workspace/sunyzc# java -classpath sunyzc.jar com.sunyzc.test.Path
[01]null
[02]null
[03]null
[04]jar:file:/usr/workspace/sunyzc/sunyzc.jar!/com/sunyzc/test/Path.class
[05]/
[06]/usr/workspace/sunyzc
[07]/usr/workspace/sunyzc
[08]jar:file:/usr/workspace/sunyzc/sunyzc.jar!/test.xml
[09]jar:file:/usr/workspace/sunyzc/sunyzc.jar!/test.xml
[10]file:/usr/workspace/sunyzc/sunyzc.jar!/test.xml
[11]/usr/workspace/sunyzc/jar:file:/usr/workspace/sunyzc/sunyzc.jar!/test.xml
[12]/usr/workspace/sunyzc/file:/usr/workspace/sunyzc/sunyzc.jar!/test.xml
[13]java.io.InputStreamReader@1034bb5
[14]jar:file:/usr/workspace/sunyzc/sunyzc.jar!/com/sunyzc/test/test.xml
[15]file:/usr/workspace/sunyzc/sunyzc.jar!/com/sunyzc/test/test.xml
[16]/usr/workspace/sunyzc/jar:file:/usr/workspace/sunyzc/sunyzc.jar!/com/sunyzc/test/test.xml
[17]/usr/workspace/sunyzc/file:/usr/workspace/sunyzc/sunyzc.jar!/com/sunyzc/test/test.xml
[18]java.io.InputStreamReader@7f5f5897
iCAS:/usr/workspace/sunyzc#

linux下執行jar檔案

linux下執行jar檔案

 

windows下tomcat執行class(編譯檔案在E:/workspace/sunyzc/context/WEB-INF/classes/)

[01]null
[02]file:/E:/workspace/sunyzc/context/WEB-INF/classes/
[03]file:/E:/workspace/sunyzc/context/WEB-INF/classes/
[04]null
[05]C:/
[06]C:/Users/sunyzc
[07]C:/Users/sunyzc
[08]null
後面均為空白指標

 

windows下tomcat執行jar包(tomcat路徑E:/apache-tomcat-6.0.35/)

[01]null
[02]file:/E:/apache-tomcat-6.0.35/lib/
[03]file:/E:/apache-tomcat-6.0.35/lib/
[04]null
[05]C:/
[06]C:/Users/sunyzc
[07]C:/Users/sunyzc
[08]null
後面均為空白指標

 

linux下tomcat執行jar包(tomcat路徑/usr/sharescm/tomcat6.0.26/)

[01]null
[02]file:/usr/sharescm/lcd/WEB-INF/classes/
[03]file:/usr/sharescm/lcd/WEB-INF/classes/
[04]null
[05]/
[06]/root
[07]/root
[08]null
後面均為空白指標

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.