目 录CONTENT

文章目录

maven项目中获取类路径和项目路径的写法示例

在水一方
2022-01-12 / 0 评论 / 0 点赞 / 1,242 阅读 / 1,331 字 / 正在检测是否收录...

springboot项目中当在类路径(resources目录)下如何获取类路径下某个文件

1 在Controller中获取类路径的写法:
image.png

        String fileName = "verifierTemplate.xlsx";
        String path = this.getClass().getResource("/").getPath()+fileName;

java.lang.Class类中的方法


 public java.net.URL getResource(String name) {
        name = resolveName(name);
        ClassLoader cl = getClassLoader0();
        if (cl==null) {
            // A system class.
            return ClassLoader.getSystemResource(name);
        }
        return cl.getResource(name);
    }

关于classpath

classpath,指的是编译后的class文件、xml、properties等配置文件所在的目录。比如,如果是maven项目,classpath为"项目名/target/classes",如果是普通项目,可能是”项目名/bin”,或者”项目名/build/classes”等等。

getResource是java.lang.Class的方法,也就是由字节码对象调getResource接受一个字符串参数,如果以"/"开头,就在classpath根目录下找(不会递归查找子目录),如果不以”/”开头,就在调用getResource的字节码对象所在目录下找(同样不会递归查找子目录)

测试

image.png

  System.out.println("路径一为:"+this.getClass().getResource("").getPath());
  System.out.println("路径二为:"+this.getClass().getResource("/").getPath());

说明

this.getClass().getClassLoader().getResource("").getPath()和this.getClass().getResource("/").getPath()得到的结果一样,均为:/D:/workspace/meas/target/classes/ 从源码中可以看到其实在getResource方法中封装了getClassLoader().getResource("")

项目启动后会自动在项目根目录下生成一个target,这里存放编译后的class文件

获取项目根路径


      File directory = new File("");// 参数为空
      String courseFile = directory.getCanonicalPath();
      System.out.println("项目路径为:"+courseFile);

image.png

0

评论区