Java获取项目路径

  • Post author:
  • Post category:java


在正常开发的情况下,我们经常会遇到:需要获取指定文件路径,虽然我知道项目在本机的路径,一旦打包发布了,再根据绝对路径获取指定文件,肯定是获取不到的。这时候就需要用java给我们提供的一些获取相对路径方法了。

@Test
public void url() throws IOException {
    // 获取当前项目下路径:方式一
    File file = new File("");
    String filePath = file.getCanonicalPath();
    // 输出:D:\MyCode\log\log4j2-java
    System.out.println(filePath);

    // 获取当前项目下路径:方式二
    // 输出:D:\MyCode\log\log4j2-java
    System.out.println(System.getProperty("user.dir"));

    // 获取类加载的根路径
    String path = this.getClass().getResource("/").getPath().substring(1);
    // 输出:D:/MyCode/log/log4j2-java/target/classes/
    System.out.println(path);

    // 获取当前类的所在工程路径
    String path1 = this.getClass().getResource("").getPath().substring(1);
    // 输出:D:/MyCode/log/log4j2-java/target/classes/com/gzl/cn/
    System.out.println(path1);

    // 获取类加载指定文件或者文件夹路径
    String path2 = this.getClass().getResource("/data/DataConvert.dll").getPath().substring(1);
    System.out.println(path2);

    //获取所有的类路径 包括jar包的路径
    System.out.println(System.getProperty("java.class.path"));
}

这个是我的项目路径。

在这里插入图片描述


注意

resources不管是在maven项目还是springboot项目我们都会将它当做资源路径,实际上就是编译后的根路径,他跟java文件夹是同等级别的。

这个是项目编译后的类根路径,从这里可以看出,我这里用的是ide编译器,eclipse也是一样的,实际上在编译器当中,java和resources都是编译后的根路径。

在这里插入图片描述

将打包的jar反编译看一下结构:

从这里可以得出结论,其实在编译器当中java和resources文件夹,我们可以理解为虚拟文件夹,实际上打出来的包是不存在这两个文件夹的,他就是代表着项目的根路径。

在这里插入图片描述

可能创建普通java项目可能会没有这个资源路径,我们可以在ide当中设置的。通过以下方式就可以将指定文件夹设置为java编译后的根路径。

在这里插入图片描述

在这里需要注意一点:我们这个路径是获取编译后的路径,也就是项目打包发布到服务器也能正常获取的,假如你新添加了一个文件,然后想要通过以下方式获取路径,可能会获取不到,因为你需要编译一下,也就是

maven clean install

一下就可以了。

// 获取类加载指定文件或者文件夹路径
String path2 = this.getClass().getResource("/data/DataConvert.dll").getPath().substring(1);
System.out.println(path2);



版权声明:本文为weixin_43888891原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。