一般在编程中,文件路径分为相对路径和绝对路径,绝对路径比较好处理,但是不灵活。因此我们在编程中对文件进行操作的时候,一般读取文件的相对路径。
相对路径——主要是相对于谁?
可以是类加载器路径,或者是当前java文件文件下的路径,在JSP编程中可能是相对于站点的路径。
序 ClassPath路径
框架小知识-Spring单元测试(classpath到底在哪里)
src下的文件编译之后就会放在WEB-INF/class路径下面。默认的路径就是在这里,注意,若是直接放在WEB-INF目录下是不会在classpath路径下的。
若是maven搭建的1项目,Resource也是classpath路径。
1. 获取路径的方法
1.1 相对于classpath路径
java项目中:%项目%bin/
javaEE项目中(war):%项目%/target/WEB-INF/class/
javaEE项目中(jar):%项目%/target/class/
Class.getResource("");
Class.getResource("/");
Class.getClassLoader().getResource("");
Class.getClassLoader().getResource("/");
当前路径:classpath路径。
以SpringBoot项目为例
String path = this.getClass().getResource("").getPath();
String path1 = this.getClass().getResource("/").getPath();
String path2 = this.getClass().getClassLoader().getResource("").getPath();
URL path3 = this.getClass().getClassLoader().getResource("/");
有什么用呢?可以将一些导出文件模板放在Resource目录下,这样的话,我们可以通过上述方法直接可以读取到文件模板。
需要注意的是:本质上以
classpath
路径为当前路径,若是资源文件不存在,那么调用getPath()方法出现空指针异常。
1.2 相对于web路径
request.getServletContext().getResource("");
request.getServletContext().getResource("/");
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
URL url = getServletContext().getResource("");
System.out.println("路径:"+url); //项目根目录下
url = getServletContext().getResource("/");
System.out.println("路径/:"+url); //项目根目录下
}
在JavaEE环境(war包)中,这个路径就是tomcat目录下的webapps的项目根路径。也就是取得站点的位置。
我们可以通过使用getServletContext().getContext(
"/")和request.getRealPath("/")取得站点的绝对路径;而getContextpath()取得是站点的相对路径【/项目名】。