getClass().getResource() 方法獲得相對路徑( 此方法在jar包中無效。返回的內容最后包含/)
創(chuàng)新互聯(lián)專注于企業(yè)成都營銷網站建設、網站重做改版、休寧縣網站定制設計、自適應品牌網站建設、H5網站設計、成都做商城網站、集團公司官網建設、外貿網站建設、高端網站制作、響應式網頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為休寧縣等各大城市提供網站開發(fā)制作服務。
例如 項目在/D:/workspace/MainStream/Test
在javaProject中,getClass().getResource("/").getFile().toString() 返回:/D:/workspace/MainStream/Test/bin/
public?String?getCurrentPath(){??
//取得根目錄路徑??
String?rootPath=getClass().getResource("/").getFile().toString();??
//當前目錄路徑??
String?currentPath1=getClass().getResource(".").getFile().toString();??
String?currentPath2=getClass().getResource("").getFile().toString();??
//當前目錄的上級目錄路徑??
String?parentPath=getClass().getResource("../").getFile().toString();??
return?rootPath;?????????
}
參考資料:
有絕對路徑與相對路徑兩種:
絕對路徑?:以引用文件之網頁所在位置為參考基礎,而建立出的目錄路徑。
絕對路徑:以Web站點根目錄為參考基礎的目錄路徑。
package?my;??
import?java.io.File;??
import?java.io.IOException;??
import?java.net.URL;??
public?class?MyUrlDemo?{??
public?static?void?main(String[]?args)?{??
MyUrlDemo?muDemo?=?new?MyUrlDemo();??
try?{??
muDemo.showURL();??
}?catch?(IOException?e)?{??
//?TODO?Auto-generated?catch?block??
e.printStackTrace();??
}??
}
public?void?showURL()?throws?IOException?{??
//?第一種:獲取類加載的根路徑???D:\git\daotie\daotie\target\classes??
File?f?=?new?File(this.getClass().getResource("/").getPath());??
System.out.println(f);??
//?獲取當前類的所在工程路徑;?如果不加“/”??獲取當前類的加載目錄??D:\git\daotie\daotie\target\classes\my??
File?f2?=?new?File(this.getClass().getResource("").getPath());??
System.out.println(f2);??
//?第二種:獲取項目路徑????D:\git\daotie\daotie??
File?directory?=?new?File("");//?參數(shù)為空??
String?courseFile?=?directory.getCanonicalPath();??
System.out.println(courseFile);??
//?第三種:??file:/D:/git/daotie/daotie/target/classes/??
URL?xmlpath?=?this.getClass().getClassLoader().getResource("");??
System.out.println(xmlpath);??
//?第四種:?D:\git\daotie\daotie??
System.out.println(System.getProperty("user.dir"));??
/*?
*?結果:?C:\Documents?and?Settings\Administrator\workspace\projectName?
*?獲取當前工程路徑?
*/??
//?第五種:??獲取所有的類路徑?包括jar包的路徑??
System.out.println(System.getProperty("java.class.path"));??
}??
}
使用JAVA后臺代碼取得WEBROOT物理路徑,可以有如下兩種方式:
1、使用JSP Servlet取得WEB根路徑可以用request.getContextPath(),相對路徑request.getSession().getServletContext().getRealPath("/"),它們可以使用我們很容易取得根路徑。
2、如果使用了spring, 在WEB-INF/web.xml中,創(chuàng)建一個webAppRootKey的param,指定一個值(默認為webapp.root)作為鍵值,然后通過Listener,或者Filter,或者Servlet執(zhí)行String webAppRootKey = getServletContext().getRealPath("/"); 并將webAppRootKey對應的webapp.root分別作為Key,Value寫到System Properties系統(tǒng)屬性中。之后在程序中通過System.getProperty("webapp.root")來獲得WebRoot的物理路徑。
具體示例代碼如下:
web.xml
?xml version="1.0" encoding="UTF-8"?
web-app version="2.4"
xmlns=""
xmlns:xsi=""
xsi:schemaLocation="
"
context-param
param-namewebAppRootKey/param-name
param-valuecsc2.root/param-value
/context-param
listener
listener-classtest.ApplicationListener/listener-class
/listener
/web-app
ApplicationListener.java
package test;
import javax.servlet.ServletContextEvent;
import org.springframework.web.context.ContextLoaderListener;
public class ApplicationListener extends ContextLoaderListener {
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
}
public void contextInitialized(ServletContextEvent sce) {
// TODO Auto-generated method stub
String webAppRootKey = sce.getServletContext().getRealPath("/");
System.setProperty("csc2.root" , webAppRootKey);
String path =System.getProperty("csc2.root");
System.out.println("sssss:::"+path);
}
}
test.java
public class test {
public void remve(){
String path =System.getProperty("csc2.root");
System.out.println("result::::::::"+path);
}
}
index.jsp
%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%
%@ page import="java.util.*" %
%@ page import="test.test" %
%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%
%
test t = new test();
t.remve();
%
html
/html
部署程序發(fā)布 啟動TOMCAT 運行index.jsp 就可以調用JAVA中全局設置的物理路徑了(說明這里的JSP 只是調用了TEST.JAVA 的remove方法,不做其他使用。原理解釋,TOMCAT啟動和讀取WEB.XML 監(jiān)聽方式加載SPRING ApplicationListener繼承SPRING ContextLoaderListener加載SPRING順便吧全局路徑賦值給csc2.root 描述,這樣之后JAVA 代碼中就可以使用System.getProperty("csc2.root")調用全路路徑了。
File類有兩個常用方法可以得到文件路徑一個是:getCanonicalPath(),另一個是:getAbsolutePath(),可以通過File類的實例調用這兩個方法例如file.getAbsolutePath()其中file是File的實例對象。下面是一個具體例子:
public?class?PathTest
{
public?static?void?main(String[]?args)
{
File?file?=?new?File(".\\src\\baidu");
System.out.println(file.getAbsolutePath());
try
{
System.out.println(file.getCanonicalPath());
}?catch?(IOException?e)
{
e.printStackTrace();
}
}
}
getAbsolutePath()和getCanonicalPath()的不同之處在于,getCanonicalPath()得到的是一個規(guī)范的路徑,而getAbsolutePath()是用構造File對象的路徑+當前工作目錄。例如在上面的例子中.(點號)代表當前目錄。getCanonicalPath()就會把它解析為當前目錄但是getAbsolutePath()會把它解析成為目錄名字(目錄名字是點號)。
下面是上面程序在我電腦上的輸出:
G:\xhuoj\konw\.\src\baidu
G:\xhuoj\konw\src\baidu