一直是个路径白痴,刚好最近有涉及了一些,所幸就总结一下,方便自己下次使用。
本文总结了一些常用到的路径,以及在打包成war时,创建上传资源的文件夹路径遇到的坑。
1. ▪/和▪▪/以及/之间的区别?
"▪/ " :是当bai前目录du
"▪▪/ ":是父级目录
“/” :是根目录
2.常用到的获取路径
//upload是我要建的一个文件夹,使用idea自带的运行项目
//第一种:C:\Users\Administrator\AppData\Local\Temp\tomcat-docbase.2442789799279956589.8088\upload
String path1 = request.getRealPath("/upload");
//第二种:idea运行 \Users\Administrator\AppData\Local\Temp\tomcat-docbase.2442789799279956589.8088\upload
//tomcat下运行
String path2=this.getServletContext().getRealPath("/upload");
// 第三种:获取项目路径 F:\AlltheProject\wechatcity\upload
File directory = new File("");// 参数为空
String path3 = directory.getCanonicalPath()+"/upload";
// 第四种:获取项目路径 F:\AlltheProject\wechatcity\upload
String path4 = System.getProperty("user.dir")+"/upload";
//第五种:获取类加载根路径(打包前) /F:/AlltheProject/wechatcity/target/classes/
//打成war包发布后 ....../wechatcity-0.0.1-SNAPSHOT/WEB-INF/classes/
String path5=this.getClass().getClassLoader().getResource("").getPath();
//第六种:获取到WEB-INF(打包前) F:/AlltheProject/wechatcity/target/upload
//打成war包发布后 ....../wechatcity-0.0.1-SNAPSHOT/WEB-INF/upload
String classesPath = this.getClass().getClassLoader().getResource("").getPath().toString();
String str1 = classesPath.substring(1, classesPath.indexOf("classes"));//只保留到WEB-INF
String path6 = str1 + "/upload";
//第七种:获取到WEB-INF以前 F:/AlltheProject/wechatcity/target/upload
//打成war包发布后 ....../wechatcity-0.0.1-SNAPSHOT/upload
String classesPath = this.getClass().getClassLoader().getResource("").getPath().toString();
String str2 = classesPath.substring(1, classesPath.indexOf("WEB-INF/classes"));//只保留WEB-INF/classes以前的,
String path7 = str2 + "/upload";
3.解释:
第一和第二种:
都是获取项目的根目录,第一种已不推荐使用。这两种用idea运行后获取的是本地缓存路径,tomcat有时候是缓存有时候是项目根目录路径。反正打包后上传文件等别用这个。
第三种:
使用该种方法时,若项目在tomcat(webapp下)环境中运行,将会获取会获取Tomcat安装目录的bin目录,不推荐使用。
第四种:
该种方法创建的文件夹,未打包前创建的upload文件夹在项目第一级下wechatcity\upload;
若打成war包发布到云服务器上后,返回的不再是项目的根目录,而是tomcat的bin目录;也就是说此时的upload文件夹会被解压到服务器bin目录下。
详细解释传送带
第七种:
若想使创建的upload文件夹放在war包中,可以使用它。
ps:如果文件夹在tomcat的bin目录中或者在war包外,不能直接使用在线访问云服务器上的资源。可能需要额外的配置。
4.总结得较详细的文章
JAVA WEB项目中各种路径的获取
Java获取项目路径下的方法(全)
Java项目读取resources资源文件路径那点事
获取项目当前路径,上一级,下一级