一直是个路径白痴,刚好最近有涉及了一些,所幸就总结一下,方便自己下次使用。
本文总结了一些常用到的路径,以及在打包成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资源文件路径那点事获取项目当前路径,上一级,下一级


参考:java类中获取WEB-INF路径Java中获取项目根路径和类加载路径的7种方法