JAVA 取得當前目錄的路徑/Servlet/class/文件路徑/web路徑/url地址

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

在寫Java程序時不可避免要獲取文件的路徑...總結一下,遺漏的隨時補上
1.可以在servlet的init方法里
String path = getServletContext().getRealPath("/");
這將獲取web項目的全路徑
例如 :E:\eclipseM9\workspace\tree\
tree是我web項目的根目錄

2.你也可以隨時在任意的class里調用
this.getClass().getClassLoader().getResource("/").getPath();
這將獲取 到classes目錄的全路徑
例如 : E:\eclipseM9/workspace/tree/WEB-INF/classes/

這個方法也可以不在web環境里確定路徑,比較好用

3.request.getContextPath();
獲得web根的上下文環境
如 /tree
tree是我的web項目的root context

/*jsp 取得當前目錄的路徑
path=request.getRealPath("");
/*得到jbossWEB發布臨時目錄 warUrl=.../tmp/deploy/tmp14544test-exp.war/
path=C:\jboss-4.0.5.GA\server\default\tmp\deploy\tmp14544test-exp.war\

String?? path??=?? (String)request.getContextPath();
/*得到項目(test)應用所在的真實的路徑 path=/test?
String???? path???? =??request.getRequestURI();
/*得到應用所在的真實的路徑 path=/test/admin/admindex.jsp

String??savePath=request.getRealPath(request.getServletPath());
/*得到當前文件的磁盤絕對路徑??

//JAVA 取得當前目錄的路徑
File?? file=new?? File(".");???
String path=file.getAbsolutePath();
???????????????path=file.getPath();
/*得到jboss運行目錄 path=C:\jboss-4.0.5.GA\bin\

---------------------------------------------

Java相對路徑/絕對路徑總結

分類:資料欄

轉自:http://www.javaeye.com/topic/117978

1.基本概念的理解

絕對路徑:絕對路徑就是你的主頁上的文件或目錄在硬盤上真正的路徑,(URL和物理路徑)例如:
C:xyz est.txt 代表了test.txt文件的絕對路徑。http://www.sun.com/index.htm也代表了一個URL絕對路徑

相對路徑:相對與某個基準目錄的路徑。包含Web的相對路徑(HTML中的相對目錄),例如:在
Servlet中,"/"代表Web應用的跟目錄。和物理路徑的相對表示。例如:"./" 代表當前目錄,"../"代表上級目錄。這種類似的表示,也是屬于相對路徑
另外關于URI,URL,URN等內容,請參考RFC相關文檔標準。

RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax,
(http://www.ietf.org/rfc/rfc2396.txt)


2.關于JSP/Servlet中的相對路徑和絕對路徑。

2.1服務器端的地址

服務器端的相對地址指的是相對于你的web應用的地址,這個地址是在服務器端解析的(不同于html和JavaScript中的相對地址,他們是由客戶端 瀏覽器解析的)也就是說這時候在jsp和servlet中的相對地址應該是相對于你的web應用,即相對于http: //192.168.0.1/webapp/的。

其用到的地方有:
forward:servlet中的request.getRequestDispatcher(address);這個address是在服務器端解析的,所以,你要forward到a.jsp應該這么寫:request.getRequestDispatcher(“/user/a.jsp”)這個/ 相對于當前的web應用webapp,其絕對地址就是:http://192.168.0.1/webapp/user/a.jsp。 sendRedirect:在jsp中<%response.sendRedirect("/rtccp/user/a.jsp");%>

2.22、客戶端的地址

所有的html頁面中的相對地址都是相對于服務器根目錄(http://192.168.0.1/)的,而不是(跟目錄下的該Web應用的目錄) http://192.168.0.1/webapp/的。 Html中的form表單的action屬性的地址應該是相對于服務器根目錄(http://192.168.0.1/)的,所以,如果提交到a.jsp?為:action="/webapp/user/a.jsp"或action="<%=request.getContextPath()%>"/user/a.jsp
提交到servlet為actiom="/webapp/handleservlet"?javascript也是在客戶端解析的,所以其相對路徑和form表單一樣。


因此,一般情況下,在JSP/HTML頁面等引用的CSS,Javascript.Action等屬性前面最好都加上
<%=request.getContextPath()%>,以確保所引用的文件都屬于Web應用中的目錄。另外,應該盡量避免使用類似".","./","http://www.cnblogs.com/"等類似的相對該文件位置的相對路徑,這樣當文件移動時,很容易出問題。


3. JSP/Servlet中獲得當前應用的相對路徑和絕對路徑

3.1 JSP中獲得當前應用的相對路徑和絕對路徑
根目錄
所對應的絕對路徑:request.getRequestURI()
文件的絕對路徑? :application.getRealPath(request.getRequestURI());
當前web應用的絕對路徑?:application.getRealPath("/");
取得請求文件的上層目錄:newFile(application.getRealPath(request.getRequestURI())).getParent()

3.2 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()
)

4.java 的Class中獲得相對路徑,絕對路徑的方法

4.1單獨的Java類中獲得絕對路徑
根據java.io.File的Doc文擋,可知:
默認情況下new File("/")代表的目錄為:System.getProperty("user.dir")。
一下程序獲得執行類的當前路徑

package?org.cheng.file;???
???
import?java.io.File;???
???
public?class?FileTest?{???
????public?static?void?main(String[] args)?throws?Exception?{???
????????System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));???
???
????????System.out.println(FileTest.class.getClassLoader().getResource(""));???
???
????????System.out.println(ClassLoader.getSystemResource(""));???
????????System.out.println(FileTest.class.getResource(""));???
????????System.out.println(FileTest.class.getResource("/"));?
????????//Class文件所在路徑?
????????System.out.println(new?File("/").getAbsolutePath());???
????????System.out.println(System.getProperty("user.dir"));???
????}???
}??

4.2服務器中的Java類獲得當前路徑(來自網絡)

(1).Weblogic

WebApplication的系統文件根目錄是你的weblogic安裝所在根目錄
例如:如果你的weblogic安裝在c:beaweblogic700.....
那么,你的文件根路徑就是c:.
所以,有兩種方式能夠讓你訪問你的服務器端的文件:
a.使用絕對路徑
比如將你的參數文件放在c:yourconfigyourconf.properties,
直接使用 new FileInputStream("yourconfig/yourconf.properties");
b.使用相對路徑
相對路徑根目錄就是你的webapplication的根路徑,即WEB-INF的上一級目錄,將你的參數文件放

在yourwebappyourconfigyourconf.properties,
這樣使用:
new FileInputStream("./yourconfig/yourconf.properties");
這兩種方式均可,自己選擇。

(2).Tomcat

在類中輸出System.getProperty("user.dir");顯示的是%Tomcat_Home%/bin

(3).Resin

不是你的JSP放的相對路徑,是JSP引擎執行這個JSP編譯成SERVLET
路徑為根.比如用新建文件法測試File f = new File("a.htm");
這個a.htm在resin的安裝目錄下

(4).如何讀相對路徑哪?

在Java文件中getResource或getResourceAsStream均可

例:getClass().getResourceAsStream(filePath);//filePath可以是"/filename",這里的/代表web

發布根路徑下WEB-INF/classes

默認使用該方法的路徑是:WEB-INF/classes。已經在Tomcat中測試。

5.讀取文件時的相對路徑,避免硬編碼和絕對路徑的使用。(來自網絡)
5.1 采用spring的DI機制獲得文件,避免硬編碼。
參考下面的連接內容:
http://www.javajia.NET/viewtopic.PHP?p=90213&
5.2 配置文件的讀取
參考下面的連接內容:
http://dev.csdn.net/develop/article/39/39681.shtm

5.3 通過虛擬路徑或相對路徑讀取一個xml文件,避免硬編碼

參考下面的連接內容:
http://club.gamvan.com/club/clubPage.jsp?iPage=1&tID=10708&ccID=8

6.Java中文件的常用操作(復制,移動,刪除,創建等)(來自網絡)
常用?Java?File 操作類
http://www.easydone.cn/014/200604022353065155.htm

Java文件操作大全(JSP中)
http://www.pconline.com.cn/pcedu/empolder/gj/java/0502/559401.html

java文件操作詳解(Java中文網)
http://www.51cto.com/html/2005/1108/10947.htm

JAVA 如何創建刪除修改復制目錄及文件
http://www.gamvan.com/developer/java/2005/2/264.html

總結:
通過上面內容的使用,可以解決在Web應用服務器端,移動文件,查找文件,復制
刪除文件等操作,同時對服務器的相對地址,絕對地址概念更加清晰。
建議參考URI,的RFC標準文擋。同時對Java.io.File. Java.Net.URI.等內容了解透徹
對其他方面的理解可以更加深入和透徹。

這是在Java中去當前項目根目錄的方法

java 代碼

/**???
?* TODO 取得當前項目根目錄???
?*?@author?PHeH
??
?* Created On 2006-12-30 17:15:41???
?*/???
public?class?Application?{????
????????????
????/**???
????? * TODO 獲取根目錄???
????? *?@return???
????? *?@author?PHeH
??
????? *Created On 2007-5-10 15:16:21???
?????*/???
????public?static?String getRootPath(){????
????????//因為類名為"Application",因此" Application.class"一定能找到????
????????String result?=?Application.class.getResource("Application.class").toString();????
????????int?index?=?result.indexOf("WEB-INF");????
????????if(index?==?-1){????
????????????index?=?result.indexOf("bin");????
????????}????
????????result?=?result.substring(0,index);????
????????if(result.startsWith("jar")){????
????????????//?當class文件在jar文件中時,返回"jar:file:/F:/ ..."樣的路徑?????
????????????result?=?result.substring(10);????
????????}else?if(result.startsWith("file")){????
????????????//?當class文件在class文件中時,返回"file:/F:/ ..."樣的路徑?????
????????????result?=?result.substring(6);????
????????}????
????????if(result.endsWith("/"))result?=?result.substring(0,result.length()-1);//不包含最后的"/"????
????????return?result;????
????}????
}

from:http://hi.baidu.com/89806/blog/item/086a08737525061f8601b019.html

轉載于:https://my.oschina.net/u/3544275/blog/1502936

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/540806.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540806.shtml
英文地址,請注明出處:http://en.pswp.cn/news/540806.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于細分到字段的權限系統_操作系統中的細分

關于細分到字段的權限系統為什么需要細分&#xff1f; (Why Segmentation is required?) In the Operating System, an important drawback of memory management is the separation of the users view of memory and the actual physical memory. Paging is the scheme which…

計算機科學技術專業解析,專業解讀—計算機科學與技術

原標題&#xff1a;專業解讀—計算機科學與技術專業培養目標&#xff1a;本專業培養具有良好的科學素養&#xff0c;系統地、較好地掌握計算機科學與技術包括計算機硬件、軟件與應用的基本理論、基本知識和基本技能與方法&#xff0c;能在科研部門、教育單位、企業、事業、技術…

阿里云服務器配置開發環境第五章:Centos7.3切換為iptables防火墻

centos7.3默認使用的防火墻應該是firewall&#xff0c;而不是iptables。而我們xxmj服務器使用的是iptables防火墻。所以&#xff0c;在配置防火墻之前&#xff0c;我們需要先關閉firewall&#xff0c;安裝iptables。 1.關閉firewall service firewalld stop systemctl disable …

mba學什么書_MBA的完整形式是什么?

mba學什么書MBA&#xff1a;工商管理碩士 (MBA: Master of Business Administration) MBA is an abbreviation of a Master of Business Administration. It is a masters degree for post-graduation in business administration. This business masters degree program is a …

Qt for Android 開發大坑

Qt for Android 開發大坑 作者: qyvlik Qt 5.5.1 這里說一說比較常見的 Qt 開發安卓的大坑。希望同學們不要做無謂的掙扎&#xff0c;跳過這些坑。輸入框 首當其沖的是輸入框&#xff0c;Qt 的輸入在安卓上表現不佳. 無法支持安卓原生的輸入法訪問 Qt 的輸入框。就是安卓輸入法…

bca ac如何聯合索引_BCA的完整形式是什么?

bca ac如何聯合索引BCA&#xff1a;計算機應用學士學位 (BCA: Bachelor of Computer Applications) BCA is an abbreviation of Bachelor of Computer Applications. It is a three-year undergraduate program in Computer applications. It is considered equivalent to B.Te…

path r'c test.html',robot framework - robot命令參數解析

robot 命令參數解析version > 3.0.1原文檔查看命令:robot --helprobot -h-F --extension value通過文件擴展名控制需要執行的用例。如果只執行一個文件&#xff0c;這個參數無效。需要執行多個擴展名時&#xff0c;用“:”分隔開。Examples:--extension robot-F robot:txt-N…

嘿,程序員,你該學點經濟學了!

前言&#xff1a; 筆者一直認為&#xff0c;一個好的程序員&#xff0c;不僅僅是代碼敲得好&#xff0c;其它方面的知識和能力相同非常重要。特別是隨著年齡的增長。非常多人也慢慢的往管理層發展。這個時候溝通與協調能力變得更加重要&#xff0c;而一些策劃&#xff0c;推廣方…

linux硬件配置_Linux硬件配置

linux硬件配置What sort of hardware configuration is expected to run Linux? This is a decent question; the real hardware configuration for the OS changes intermittently. The Linux Hardware?HOWTO gives a (pretty much) complete posting of hardware supported…

重郵2019計算機考研復試名單,重慶郵電大學2019年碩士研究生招生復試通知

當前2019年考研分數線已經公布&#xff0c;穩穩過線的同學即可全心準備復試了&#xff0c;中公考研小編整理了“重慶郵電大學2019年碩士研究生招生復試通知”文章&#xff0c;希望對大家有所幫助!各復試考生&#xff1a;根據《2019年重慶郵電大學碩士研究生復試工作方案》&…

Linux相關圖解隨記

01.dns解析過程02.用戶訪問網站流程03.局域網電腦上網流程04.網站架構圖解轉載于:https://blog.51cto.com/qinbin/1954149

數據庫范式5nf_第五范式(5NF)| 數據庫管理系統

數據庫范式5nfFifth normal form (5NF) is also known as project-join normal form (PJ/NF). It is designed to minimize redundancy in relational databases by separating semantically connected relationships in multiple formats to store multi-valued facts. 第五范…

量子物理 詹班 計算機,(電氣系計算機系詹班)量子物理作業答案

西南交大峨眉校區大學物理西南交大峨眉校區《大學物理》(量子物理基礎)作業6(電氣、計算機、詹班)一 選擇題1. 以一定頻率的單色光照射在某種金屬上&#xff0c;測出其光電流曲線在圖中用實線表示&#xff0c;然后保持光的頻率不變&#xff0c;增大照射光的強度&#xff0c;測出…

MySQL5.6 新特性之GTID【轉】

轉自 MySQL5.6 新特性之GTID - jyzhou - 博客園http://www.cnblogs.com/zhoujinyi/p/4717951.html 背景&#xff1a; MySQL5.6在5.5的基礎上增加了一些改進&#xff0c;本文章先對其中一個一個比較大的改進"GTID"進行說明。 概念&#xff1a; GTID即全局事務ID&#…

python判斷素數程序_Python程序檢查素數

python判斷素數程序什么是質數&#xff1f; (What is a prime number?) A prime number is a natural number that is greater than 1 and cannot be formed by multiplying two smaller natural numbers. 質數是大于1的自然數&#xff0c;不能通過將兩個較小的自然數相乘而形…

計算機高級工程師職稱評定條件,高級工程師職稱評定條件是什么

高級工程師職稱評定條件是什么&#xff0c;高級工程師職稱有什么作用&#xff0c;以下是小編整理的高級工程師職稱評定條件相關內容&#xff0c;供您參考。高級工程師評定條件1、本科畢業及以上&#xff0c;獲得工程師資格5年以上&#xff0c;可以申報高級工程師。2、博士畢業&…

c# datetime._C#| DateTime.Year屬性與示例

c# datetime.DateTime.Month屬性 (DateTime.Month Property) DateTime.Month Property is used to get the year component of this object. Its a GET property of DateTime class. DateTime.Month屬性用于獲取此對象的年份組成部分。 這是DateTime類的GET屬性。 Syntax: 句法…

NO6——KMP

1 int next[N];2 char str1[M],str2[N];3 //str1 長&#xff0c;str2 短4 //len1,len2,對應str1,str2的長5 6 void get_next(int len2)7 {8 int i 0,j -1;9 next[0] -1;10 while(i<len2)11 {12 if(j -1 || str2[i] str2[j])13 {14 …

計算機文化基礎第二章,計算機文化基礎(第二章Windows2000操作系統)

計算機文化基礎(第二章Windows2000操作系統)第二章Windows 2000 操作系統1. 打開“資源管理器”的方法不能是_A右擊“開始”按鈕 B選擇“開始” 、 “程序”菜單 C從“我的電腦”的快捷菜單 D從“控制面板”中選擇2. 在“資源管理器”中選定多個文件的方法不能是_A逐個雙擊要選…

r語言簡介_R語言簡介

r語言簡介R is a language and environment for statistical computing and graphics that is supported by the R Foundation for Statistical Computing. It is a GNU project which is similar to the S language and environment developed at Bell Laboratories by John C…