欢迎光临我的博客[http://poetize.cn],前端使用Vue2,聊天室使用Vue3,后台使用Spring Boot
/
表示文件根目录(web表示项目目录)
./
表示文件目前所在的目录(写与不写等效)
../
表示文件的上一层目录
绝对路径 = 参考路径 + 相对路径
// 第一种:获取类加载的根路径
this.getClass().getResource("/").getPath(); /C:/Users/My/IdeaProjects/OTO/target/classes/
// 获取当前类的所在工程路径; 如果不加“/” 获取当前类的加载目录
this.getClass().getResource("").getPath(); /C:/Users/My/IdeaProjects/OTO/target/classes/entity/
// 第二种:获取类加载的根路径(不允许以"/"开头)
this.getClass().getClassLoader().getResource(""); file:/C:/Users/My/IdeaProjects/OTO/target/classes/(URL)
this.getClass().getClassLoader().getResource("").getPath(); /C:/Users/My/IdeaProjects/OTO/target/classes/
// 第三种:通过Thread(不允许以"/"开头)
Thread.currentThread().getContextClassLoader().getResource("").getFile(); /C:/Users/My/IdeaProjects/OTO/target/classes/
获取JavaEE项目的资源路径:
getRealPath()方法中的参数, 是以WEB-INF目录的父目录为根目录进行查找
获取WEB-INF目录的父目录下的资源,而且src的源码编译后的class文件,也会存放在WEB-INF/classes文件夹下,
所以获取JavaEE资源的方法,也适用于获取Java普通资源
得到当前工程的根路径
String path = request.getContextPath(); /sell
得到真实目录
String path = request.getServletContext().getRealPath(“/”) ; E:\apache-tomcat-7.0.65\webapps\sell\
servletContext.getRealPath(""); D:\apache-tomcat-7.0.52\项目名
servletContext.getRealPath("/"); D:\apache-tomcat-7.0.52\项目名\
servletContext.getRealPath("/文件名/资源名"); D:\apache-tomcat-7.0.52\项目名\文件名\资源名
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
2.在类中取得路径:
(1)类的绝对路径:Class.class.getClass().getResource("/").getPath()
结果:/D:/TEST/WebRoot/WEB-INF/classes/
(2)得到工程的路径:System.getProperty("user.dir")
结果:D:\TEST
3.在Servlet中取得路径:
(1)得到工程目录:request.getSession().getServletContext().getRealPath("") 参数可具体到包名。
结果:E:\Tomcat\webapps\TEST
request.getSession().getServletContext().getRealPath("/upload") 参数可具体到包名。
结果:E:\Tomcat\webapps\TEST\upload
(2)得到IE地址栏地址:request.getRequestURL()
结果:http://localhost:8080/TEST/test
(3)得到相对地址:request.getRequestURI()
结果:/TEST/tes
示例
public class PathUtils {
//获取系统分隔符
private static String separator = System.getProperty("file.separator");
//获取图片基础路径
public static String getImgBasePath() {
String os = System.getProperty("os.name");
String basePath = "";
if (os.toLowerCase().startsWith("win")) {
basePath = "D:/image/";
} else {
basePath = "/home/image/";
}
basePath = basePath.replace("/", separator);
return basePath;
}
//获取店铺条目下不同店铺的图片路径
public static String getShopPath(long shopId) {
String imagePath = "shop/" + shopId + "/";
return imagePath.replace("/", separator);
}
}
public class ImageUtils {
//随机数
private static final Random r=new Random();
//储存图片并获取店铺图片路径(基础路径+店铺分类路径+随机文件名)
public static String saveImgAndGetPath(CommonsMultipartFile multipartFile,long shopId){
String path = PathUtils.getImgBasePath()+PathUtils.getShopPath(shopId)+getRandomFileName()+getExtensin(multipartFile);
File file = new File(path);
if(!file.getParentFile().exists()){
file.getParentFile().mkdirs();
}
try {
Thumbnails.of(multipartFile.getInputStream()).toFile(file);
} catch (IOException e) {
throw new ShopException("创建缩略图失败");
}
return path;
}
//获取文件的扩展名
public static String getExtensin(CommonsMultipartFile multipartFile){
String originalFilename = multipartFile.getOriginalFilename();
return originalFilename.substring(originalFilename.lastIndexOf('.'));
}
//随机文件名:当前时间 + 随机五位数
public static String getRandomFileName(){
//获取随机五位数
int random = r.nextInt(89999)+10000;
String newTime = sdf.format(new Date());
return newTime+random;
}
}