SSM web專案
以工程名為TEST為例:
(1)得到包含工程名的當前頁面全路徑:request.getRequestURI()
結果:/TEST/test.jsp
(2)得到工程名:request.getContextPath()
結果:/TEST
(3)得到當前頁面所在目錄下全名稱:request.getServletPath()
結果:如果頁面在jsp目錄下 /TEST/jsp/test.jsp
(4)得到頁面所在伺服器的全路徑:application.getRealPath("test.jsp")
結果:D:\resin\webapps\TEST\test.jsp
(5)得到頁面所在伺服器的絕對路徑:absPath=new java.io.File(application.getRealPath(request.getRequestURI())).getParent();
結果:D:\resin\webapps\TEST
2.在類中取得路徑:
(1)類的絕對路徑:Class.class.getClass().getResource("/").getPath()
結果:/D:/TEST/WebRoot/WEB-INF/classes/pack/
(2)得到工程的路徑:System.getProperty("user.dir")
結果:D:\TEST
3.在Servlet中取得路徑:
(1)得到工程目錄:request.getSession().getServletContext().getRealPath("") 引數可具體到包名。
結果:E:\Tomcat\webapps\TEST
(2)得到IE位址列地址:request.getRequestURL()
結果:http://localhost:8080/TEST/test
(3)得到相對地址:request.getRequestURI()
結果:/TEST/test
註釋:當專案中的jsp頁面有<base href="<%=request.getContextPath()%>/">標籤時,可以使用以下程式碼來獲取根目錄,以防專案名為空的時候報錯:
function getRootPath(){
return $("base").attr("href");
}
var webpath=getRootPath(); //webpath就是目錄路徑變數
SpringBoot Web專案
import org.springframework.util.ClassUtils;
import org.springframework.util.ResourceUtils;
1、在使用者頭像上傳的功能實現時,獲取目錄路徑
String path = ClassUtils.getDefaultClassLoader().getResource("").getPath()
//輸出path: D:/java_project/manage/target/classes/
專案中圖片上傳的路徑是 resources/static/img/headImg/ 中,路徑可以這樣寫:
String path = ClassUtils.getDefaultClassLoader().getResource("").getPath()+"static/img/headImg/";
//輸出path:/D:/java_project/manage/target/classes/static/img/headImg/
2、還有一種寫法,效果一樣
//獲取專案的根目錄
File path = new File(ResourceUtils.getURL("classpath:").getPath());
System.out.println("path:"+path.getAbsolutePath());
//path:D:\java_project\manage\target\classes
//獲取專案根目錄下的某個資料夾,這裡是 "static/img/headImg/"
File uploadpath = new File(path.getAbsolutePath(),"static/img/headImg/");
System.out.println("uploadpath:"+uploadpath.getAbsolutePath());
//uploadpath:D:\java_project\manage\target\classes\static\img\headImg
//也可以直接寫成這樣
String path = ResourceUtils.getURL("classpath:static/img/headImg/").getPath();
注意:ResourceUtils的這種寫法在linux系統是無效,請注意
推薦使用一下兩種方式:
String rootPath = Class.class.getClass().getResource("/").getPath();
//D:\java_project\manage\target\classes\
String rootPath2 = ClassUtils.getDefaultClassLoader().getResource("").getPath();
//D:\java_project\manage\target\classes\
如果獲取jdk下的目錄,需要指定目錄資料夾獲取。
ClassUtils
是Spring util包下的類
public static void main(String[] args) {
// 獲取模板檔案
String rootPath = Class.class.getClass().getResource("/").getPath();
String rootPath1 = Class.class.getClass().getResource("/jasper").getPath();
String ctxPath = ClassUtils.getDefaultClassLoader().getResource("").getPath();
String ctxPath1 = ClassUtils.getDefaultClassLoader().getResource("jasper").getPath();
log.info("\n rootPath: {}, \n rootPath1:{}", rootPath, rootPath1);
log.info("\n ctxPath: {},\n ctxPath1:{}", ctxPath, ctxPath1);
}
獲取resources下的檔案流
1、透過ClassPathResource類獲取檔案流,SpringBoot中所有檔案都在jar包中,沒有一個實際的路徑,因此可以使用以下方式。ClassPathResource、PropertiesLoaderUtils
都是Spring core包下的類
ClassPathResource classPathResource = new ClassPathResource("jdbc.properties");
Properties properties = PropertiesLoaderUtils.loadProperties(classPathResource);
properties.list(System.out);
System.out.println("==============================================");
String property = properties.getProperty("jdbc.username");
System.out.println("property = " + property);
2、直接使用getResourceAsStream方法獲取流,上面的幾種方式都需要獲取檔案路徑,但是在SpringBoot中所有檔案都在jar包中,沒有一個實際的路徑,因此可以使用以下方式。
InputStream resourceAsStream = RuoYiAuthApplication.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
properties.load(resourceAsStream);
properties.list(System.out);
System.out.println("==============================================");
String property = properties.getProperty("jdbc.url");
System.out.println("property = " + property);