java中獲取路徑總結

1、獲取web服務器項目的真實物理路徑

request.getSession().getServletContext().getRealPath("/");  

2、相對路徑的獲得
2.1、說明:相對路徑(即不寫明時候到底相對誰)均可通過以下方式獲得(不論是一般的java項目還是web項目)

String relativelyPath=System.getProperty("user.dir");  

上述相對路徑中,java項目中的文件是相對於項目的根目錄
web項目中的文件路徑視不同的web服務器不同而不同
(tomcat是相對於 tomcat安裝目錄\bin)
3、類加載目錄的獲得(即當運行時某一類時獲得其裝載目錄)
3.1. 通用的方法一
(不論是一般的java項目還是web項目,先定位到能看到包路徑的第一級目錄)   

InputStream is=TestAction.class.getClassLoader().getResourceAsStream("test.txt");  
String path = this.getClass().getClassLoader().getResource("").getPath();

(test.txt文件的路徑爲項目名\src\test.txt;類TestAction所在包的第一級目錄位於src目錄下)   
上式中將TestAction,test.txt替換成對應成相應的類名和文件名字即可
3.2. 通用方法二
(此方法和1.1中的方法類似,不同的是此方法必須以’/’開頭)

 InputStream is=Test1.class.getResourceAsStream("/test.txt"); 

(test.txt文件的路徑爲項目名\src\test.txt,類Test1所在包的第一級目錄位於src目錄下)  
4. web項目根目錄的獲得(發佈之後)
4.1. 從servlet出發
   可建立一個servlet在其的init方法中寫入如下語句

ServletContext s1=this.getServletContext();  
String temp=s1.getRealPath("/");

(關鍵)
   結果形如:D:\工具\Tomcat-6.0\webapps\002_ext\ (002_ext爲項目名字)
   如果是調用了s1.getRealPath(“”)則輸出D:\工具\Tomcat-6.0\webapps\002_ext(少了一個”\”)
4.2. 從httpServletRequest出發

String path = request.getSession().getServletContext().getRealPath("")

結果形如:D:\工具\Tomcat-6.0\webapps\002_ext\
5. classpath的獲取
(在Eclipse中爲獲得src或者classes目錄的路徑)
5.1. 方法一

Thread.currentThread().getContextClassLoader().getResource("").getPath();  
//eg:  
String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();  
System.out.println("path---"+path); 

輸出:path—/E:/order/002_ext/WebRoot/WEB-INF/classes/   
5.2. 方法二

JdomParse.class.getClassLoader().getResource("").getPath() (JdomParse爲src某一個包中的類,下同)  
//eg:  
String p1=JdomParse.class.getClassLoader().getResource("").getPath();  
System.out.println("JdomParse.class.getClassLoader().getResource--"+p1);  

輸出:
JdomParse.class.getClassLoader().getResource–/E:/order/002_ext/WebRoot/WEB-INF/classes/
另外,如果想把文件放在某一包中,則可以通過以下方式獲得到文件(先定位到該包的最後一級目錄)

String p2=JdomParse.class.getResource("").getPath();  
System.out.println("JdomParse.class.getResource---"+p2);  

輸出:
JdomParse.class.getResource—/E:/order/002_ext/WebRoot/WEB-INF/classes/jdom/
(JdomParse爲src目錄下jdom包中的類)

在jsp和class文件中調用的相對路徑不同。
在jsp裏,根目錄是WebRoot。
在class文件中,根目錄是WebRoot/WEB-INF/classes
當然你也可以用System.getProperty(“user.dir”)獲取你工程的絕對路徑。
6. 在Jsp,Servlet,Java中詳細獲得路徑的方法
6.1. jsp中取得路徑:
以工程名爲TEST爲例:
(1)得到包含工程名的當前頁面全路徑:

request.getRequestURI()  

結果:/TEST/test.jsp
(2)得到工程名:

request.getContextPath()  

結果:/TEST
(3)得到當前頁面所在目錄下全名稱:

request.getServletPath()  

結果:如果頁面在jsp目錄下 /TEST/jsp/test.jsp
(4)得到頁面所在服務器的全路徑:

application.getRealPath("頁面.jsp")  

結果:D:\resin\webapps\TEST\test.jsp
(5)得到頁面所在服務器的絕對路徑:

absPath=new java.io.File(application.getRealPath(request.getRequestURI())).getParent(); 

結果:D:\resin\webapps\TEST
6.2. 在類中取得路徑:
(1)類的絕對路徑:Class.class.getClass().getResource(“/”).getPath()
結果:/D:/TEST/WebRoot/WEB-INF/classes/pack/
(2)得到工程的路徑:

System.getProperty("user.dir")  

結果:D:\TEST







//      1
System.out.println("1" + request.getContextPath());
//      C:\Users\microdsy\git\PRTA_KSSO\WebContent
System.out.println(request.getSession().getServletContext().getRealPath(""));
//      C:\Users\microdsy\git\PRTA_KSSO\WebContent\
System.out.println(request.getSession().getServletContext().getRealPath("/"));
//      C:\Users\microdsy\git\PRTA_KSSO\WebContent\caDriver
System.out.println(request.getSession().getServletContext().getRealPath("/caDriver"));
//      C:\Users\microdsy\git\PRTA_KSSO\WebContent\caDriver
System.out.println(request.getSession().getServletContext().getRealPath("/caDriver/"));
//      C:\Users\microdsy\git\PRTA_KSSO\WebContent\caDrivercrl.crl
System.out.println(request.getSession().getServletContext().getRealPath("/caDriver/") + "crl.crl");
//      C:\Users\microdsy\git\PRTA_KSSO\WebContent\caDriver\crl.crl
System.out.println(request.getSession().getServletContext().getRealPath("/caDriver") + File.separator + "crl.crl");
//      /C:/Users/microdsy/git/PRTA_KSSO/bin/
System.out.println(this.getClass().getClassLoader().getResource("").getPath());
//      /C:/Users/microdsy/git/PRTA_KSSO/bin/../WebContent/
System.out.println(this.getClass().getClassLoader().getResource("").getPath()+"../WebContent/");
//      /C:/Users/microdsy/git/PRTA_KSSO/bin/../WebContent/crlcache\crl.crl
System.out.println(this.getClass().getClassLoader().getResource("").getPath()+"../WebContent/"+CrlDownloadCfg.getInstance().crlCachePath + File.separator + "crl.crl");

在獲取到路徑,如果還想要到上級路徑的話,可以用 path+”../” 返回到上級路徑
path+”../WebContent” 可以到上級的同級文件夾WebContent下。







二、網上其他資料

<%=request.getContextPath()%>是解決相對路徑的問題,可返回站點的根路徑。

<a href="<%=request.getContextPath()%>/XXX.jsp"> //這樣獲得的是絕對路徑
<a href="XXX.jsp"> //這樣獲得的是相對路徑
<a href="<%=request.getContextPath()%>/XXXX.jsp"> //能夠更有效的防治連接的失效。

request.getContextPath()得到的是項目的名字,如果項目爲根目錄,則得到一個”“,即空的字條串,
如果項目爲dzjc, <%=request.getContextPath()% >/ 將得到dzjc/,服務器端的路徑則會自動加上,
<a href="XXX.jsp"> 應該就是指當前路徑下的這個xxx.jsp頁面,
有時候也可以在head裏設置html:base 來解決路徑的問題,不過用的最多的還是request.getContextPath。
用EL來表示相同功能的EL爲:${pageContext.request.getContextPath()}

request.getScheme();//返回的協議名稱,默認是http
request.getServerName();//返回的是你瀏覽器中顯示的主機名
getServerPort();//獲取服務器端口號

如果想得到工程文件的實際物理路徑,可通過:<%=request.getRealPath(“/”)%>,這樣頁面就會輸出:d:/web

現在request.getRealPath(“”) 這個方法已經不推薦使用了
可以使用ServletContext.getRealPath(java.lang.String) instead. request.getSession().getServletContext().getRealPath()得到工程文件的實際物理路徑,也就是絕對地址

簡便用法:
String path=request.getContextPath();//path = /oa
request.setAttribute(“path”, path);
在頁面中應用(EL) ${path}/images/xx.jpg(絕對定位:oa/images/xx.jpg)
可以解決複雜的相對路徑定位失敗的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章