知识点----类加载路径

项目场景:

当我们在项目中定位一个资源时,常常用到相对路径,但相对路径中“./”在项目的迭代不太合适,就需要用到 类加载路径


问题描述

每次项目的迭代相对路径都有所改变,我们每次在迭代的同时还要去修改代码中的相对路径,十分的繁琐.

在版本1:
File file = new File("./V1/src/main/resources/static/index.html");

在版本2时
File file = new File("./V2/src/main/resources/static/index.html");

原因分析:

实际开发中有一个常用的相对路径:类加载路径类加载路径是以当前类作为依据,定位的是当前类所在包最上级包的上一层。

例如:当前类ClientHandler,它所在的包:package com.birdboot.core; 该类所在包的最上级:com 而类加载路径则是com的上级目录:java目录(V2/src/main/java)实际上不是该目录,因为JVM在执行当前类时,并非执行ClientHandler.java文件而是执行ClientHandler.class文件。
因此类加载路径应当是ClientHandler.class所在包最上级(com)的上级目录在IDEA里,MAVEN项目中所有的代码编译后,会放在target/classes目录中。因此在classes目录中也会包含:com/birdboot/core/ClientHandler.class。所以实际上类加载路径应当是:classes目录由于我们项目中所有的代码编译后都是放在target/classes中,因此定位到classes目录就可以顺着该目录找到项目中所有类。

注意: 在MAVEN项目中有一个要求: src/main下有俩个子目录 java:要求存放所有.java文件和包 resources:存放所有其他类型文件 但是最终编译后,java和resources会合并保存到target/classes下。 因此V5项目编译后,产生target/classes后,会发现该目录下有com目录(所有java代码) 和static目录 因此,定位类加载路径还可以访问到在resources下存放的所有非java文件


解决方案:

使用类加载路径解决

 File baseDir = new File(
                 ClientHandler.class.getClassLoader().getResource(".").toURI()
            );
            //定位类加载路径下的static目录
            File staticDir = new File(baseDir,"static");
            //定位static目录中的index.html页面
            File file = new File(staticDir,"index.html");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值