Java知多少——相对路径和绝对路径

一般在编程中,文件路径分为相对路径和绝对路径,绝对路径比较好处理,但是不灵活。因此我们在编程中对文件进行操作的时候,一般读取文件的相对路径。

相对路径——主要是相对于谁?

可以是类加载器路径,或者是当前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()取得是站点的相对路径【/项目名】。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容